2

我目前在一个包含多个 JSON 行的文件中拥有这些数据(大约 13k 行,但下面的示例被缩短了:

{"first_name":"John","last_name":"Smith","age":30}
{"first_name":"Tim","last_name":"Johnson","age":34}

我有以下代码:

import json
import codecs

with open('brief.csv') as f:
    for line in f:
        tweet = codecs.open('brief.csv', encoding='utf8').read()
        data = json.loads(tweet)
print data
print data.keys()
print data.values()

如果我的文件中只有一行数据,这很好用。但是,我似乎无法弄清楚如何逐行将每一行更改为字典。当我尝试在多行上运行它时,我收到 ValueError(errmsg("Extra data", s end, len(s))) 错误,因为代码只想处理两个大括号,即第一行。我最终希望能够选择某些键(如 first_name 和 age),然后只从我的文件中打印出这些值。

知道如何做到这一点吗?

4

2 回答 2

1

您正在为每一行读取整个文件一次......尝试这样的事情:

import json
import codecs

tweets = []

with codecs.open('brief.csv', encoding='utf8') as f:
    for line in f.readlines():
        tweets.append(json.loads(line))

print tweets

for tweet in tweets:
    print tweet.keys()
    print tweet['last_name']
于 2013-08-25T15:28:06.950 回答
0

也许你可以尝试像下面更简化

>>> import simplejson as json 
>>> with open("brief.csv") as f:
...     for line in f:
...         data = json.loads(line)
...         print data
...         print data.values()
...         print data.keys()

{'first_name': 'John', 'last_name': 'Smith', 'age': 30}
['John', 'Smith', 30]
['first_name', 'last_name', 'age']
{'first_name': 'Tim', 'last_name': 'Johnson', 'age': 34}
['Tim', 'Johnson', 34]
['first_name', 'last_name', 'age']
于 2013-08-25T15:37:35.333 回答