解析带有复杂定界符的文本文件

时间:2019-02-07 00:18:08

标签: python python-3.x csv text io

我有一个文本文件,其中包含以下格式的推文

['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 :(得分:3)

您应该使用以下字符串进行拆分:read_file.split("', '")(没有前导或尾随空格,没有反斜杠)。

这不会处理前导和尾随字符('[])。虽然您可以手动处理它们,但看起来该列表是使用python模块或函数写入文件的。您可以使用同一模块直接读入列表。例如,对您的1行文件使用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)

答案 1 :(得分:0)

您的数据几乎以JSON存储,除了使用单引号而不是双引号。也许最好将数据“修复”为真实的JSON,然后使用json模块进行处理:

import json
read_file = read_file.replace('"', '\\"').replace("'", '"')
split_dataset = json.loads(read_file)

答案 2 :(得分:0)

该文本文件是使用“字符串化” 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