解析文本文件,一个复杂的分隔符

问题描述 投票:1回答:3

我有一个包含按以下格式的鸣叫的文本文件

['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
python python-3.x csv text io
3个回答
3
投票

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

这将不采取前端和后端字符('[])的照顾。虽然可以手动照顾他们,它看起来像列表中写有一个Python模块或功能文件。机会是你可以使用相同的模块直接读取到一个列表。例如,使用yaml,为您的1行文件,但多线工作的文件太多:

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)

0
投票

您的数据存储在几乎JSON,除了单引号代替双引号。也许这是最好的“修复”的数据看起来像真正的JSON,然后用json模块处理:

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

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
© www.soinside.com 2019 - 2024. All rights reserved.