我的文字文件如下所示。
tweets = []
for line in open('tweets.txt').readlines():
print line[1]
tweets.append(line)
我想从列表中读取每个第二个元素,意味着将所有文本推文转换为数组。
我写了
{{1}}
但是当我看到输出时,它只占用每一行的第二个字符。
答案 0 :(得分:1)
不应该猜测数据的格式,而应该找出。
偶尔,你做必须处理一些从未记录过的某种格式的旧文件,并且没有人记得它是什么。在这种情况下,您必须对其进行逆向工程。但是你想要做的就是猜测可能的可能性,并尝试用尽可能多的验证和错误处理来解析它,以验证你猜对了。
在这种情况下,格式看起来很像JSON lines或ndjson。两种编码多个对象的方式略有不同,每行一个JSON文本,对这些文本及其编码方式和它们之间的空格具有特定限制。
所以,虽然像这样的快速和肮脏的解析器可能会起作用:
with open('tweets.txt') as f:
for line in f:
tweet = json.loads(line)
dosomething(tweet)
您可能想要使用像jsonlines
这样的库:
with jsonlines.open('tweets.txt') as f:
for tweet in f:
dosomething(tweet)
快速和肮脏的解析器在JSON行上工作的事实当然是该格式的一部分 - 但如果你实际上并不知道你是否有JSON行,那么你就是这样做的。最好确保。
答案 1 :(得分:0)
由于您的输入看起来像Python表达式,我使用ast.literal_eval
来解析它们。
以下是一个例子:
import ast
with open('tweets.txt') as fp:
tweets = [ast.literal_eval(line)[1] for line in fp]
print(tweets)
输出:
['we break dance not hearts by Short Stack is my ringtone.... i LOVE that !!!.....\n', 'I want to write a . I think I will.\n', '@va_stress broke my twitter..\n', '" "Y must people insist on talking about stupid politics on the comments of a bubblegum pop . Sorry\n', 'aww great "Picture to burn"\n', '@jessdelight I just played ur joint two s ago. Everyone in studio was feeling it!\n', 'http://img207.imageshack.us/my.php?image=wpcl10670s.jpg her s are so perfect.\n', 'cannot hear the new due to geographic location. i am geographically undesirable. and tune-less\n', '" couples in public\n', "damn wendy's commerical got that damn in my head.\n", 'i swear to cheese & crackers @zyuuup is in Detroit like every 2 months & i NEVER get to see him! i swear this blows monkeyballs!\n', '" getting ready for school. after i print out this\n']
答案 2 :(得分:0)
当您在Python中读取文本文件时,这些行只是字符串。它们不会自动转换为其他一些数据结构。
在您的情况下,您的文件中的每一行看起来都包含一个JSON列表。在这种情况下,您可以先使用json.loads()
解析该行。这会将字符串转换为Python list
,然后您可以使用第二个元素:
import json
with open('tweets.txt') as fp:
tweets = [json.loads(line)[1] for line in fp]