Разбор текстового файла со сложным разделителем - PullRequest
0 голосов
/ 07 февраля 2019

У меня есть текстовый файл, содержащий твиты в следующем формате

['RT @abcd: Name another swing group who can sell out Bob Field. Thank you.', 'Thanks to amazing supporters like @Bob Community Development, eligible New Yorkers can use NYC #FreeTaxPrep to get… SomeURL']

Я хочу преобразовать строку в список отдельных твитов.

На мой взгляд, разделительодиночная кавычка, за которой следует запятая, за которой следует пробел, за которым следует одинарная кавычка.

Мой код выглядит следующим образом:

opened_file = open('file_name.txt')
read_file = opened_file.read()
split_dataset = read_file.split(" \', \' ")

Однако, когда я проверяю длинуПолученный список, я получаю размер только один, что означает, что синтаксический анализ не проводился.

>>> len(split_dataset)
1

Ответы [ 3 ]

0 голосов
/ 07 февраля 2019

Ваши данные хранятся почти в формате JSON, за исключением того, что вместо двойных кавычек используются одинарные кавычки.Возможно, лучше «исправить» данные так, чтобы они выглядели как настоящие JSON, а затем обработать их с помощью модуля json:

import json
read_file = read_file.replace('"', '\\"').replace("'", '"')
split_dataset = json.loads(read_file)
0 голосов
/ 07 февраля 2019

Текстовый файл был написан с «строковым» синтаксисом списка Python.ast.literal_eval может преобразовать его обратно в настоящий список Python:

>>> s = '''['RT @abcd: Name another swing group who can sell out Bob Field. Thank you.', 'Thanks to amazing supporters like @Bob Community Development, eligible New Yorkers can use NYC #FreeTaxPrep to get… SomeURL']'''
>>> import ast
>>> ast.literal_eval(s)
['RT @abcd: Name another swing group who can sell out Bob Field. Thank you.', 'Thanks to amazing supporters like @Bob Community Development, eligible New Yorkers can use NYC #FreeTaxPrep to get… SomeURL']

Это будет читать и преобразовывать каждую строку:

import ast
with open('file_name.txt') as f:
    for line in f:
        L = ast.literal_eval(line)
        # do something with the list
0 голосов
/ 07 февраля 2019

Вы должны разделить, используя эту строку: read_file.split("', '") (без начальных или конечных пробелов, без обратной косой черты).

Это не позаботится о начальных и конечных символах (', [ и]).Хотя вы можете позаботиться о них вручную, похоже, список был записан в файл с модулем или функцией python.Скорее всего, вы можете использовать тот же модуль для чтения непосредственно в список.Например, используя yaml, для файла из одной строки, но также работает и с многострочными файлами:

import yaml

with  open('file_name.txt') as opened_file:
    for line in opened_file.readlines():
        split_dataset = yaml.load(line)
        print len(split_dataset)
...