我有一个非常大的txt文件需要读取和处理,但是由于我是Python新手,我不知道该文件的格式是什么以及如何读取它。下面有一个示例:
[
{"content": "111111", "n": "ITEM 1", "a": "ANOTHER", "t": 1},
{"content": "222222", "n": "ITEM 2", "a": "ANOTHER", "t": 1},
{"content": "333333", "n": "ITEM 3", "a": "ANOTHER", "t": 1}
]
所以,我需要循环列表“[]”中的每个项目(我认为我做了),然后每个项目如“content”,“n”,“a”,“t”。
我尝试读取文件并进行如下循环:
for item in thecontent:
data = json.load(item)
pprint(data)
我认为我将上面循环中的每个“项目”作为字符串而不是 JSON 获取。
编辑2 我认为我需要使用 ujson 数据类型,因为我在文档中获得的示例与上面的相同。如果您想更好地了解,请访问文档页面
>>> import ujson
>>> ujson.dumps([{"key": "value"}, 81, True])
'[{"key":"value"},81,true]'
>>> ujson.loads("""[{"key": "value"}, 81, true]""")
[{u'key': u'value'}, 81, True]
谢谢大家!
编辑3: 我一直在寻找有关我遇到的问题的任何答案,只是发现问题不是关于“如何读取”列表或元组,因为我是通过文件完成的。
主要问题是如何在从网络获取内容时将字节转换为字符串,我在这个主题中解决了它,更具体地说是在这个回复。
我编写的获取网页内容并将其转换为 JSON 的代码是:
def get_json_by_url(url):
r = requests.get(url)
r.raise_for_status()
return json.loads(r.content.decode('utf-8'))
因此,对于任何正在寻找此内容的人来说,这可能是一个解决方案,我已将标题从“如何在 python 中读取元组(或 JSON)列表”更改为“如何从网络获取内容并从bytes to str/json' 这是我遇到的问题。
很抱歉没有很好地解释这个问题,所以由于我是Python新手,有时需要花很多时间来诊断问题本身。
谢谢大家!
这两个解决方案都适合我,并假设文件采用上面示例中的格式。 不过,这取决于您从文件加载数据后想要如何处理这些数据(您没有指定这一点)。
首先,简单/快速版本最终将所有数据放在一个列表(字典列表)中:
import json
with open("myFile.txt", "r") as f:
data = json.load(f) # load the entire file content into one list of many dictionaries
# process data here as desired possibly in a loop if you like
print data
输出:
[{u'content': u'111111', u'a': u'ANOTHER', u't': 1, u'n': u'ITEM 1'}, {u'content': u'222222', u'a': u'ANOTHER', u't': 1, u'n': u'ITEM 2'}, {u'content': u'333333', u'a': u'ANOTHER', u't': 1, u'n': u'ITEM 3'}]
对于非常大的文件,或者如果您不希望所有数据都在一个列表中:
import json
with open("myFile.txt", "r") as f:
for line in f: # for each line in the file
line = line.strip(", ][\n") # strip off any leading and trailing commas, spaces, square brackets and newlines
if len(line): # if there is anything left in the line it should look like "{ key: value... }"
try:
data = json.loads(line) # load the line into a single dictionary
# process a single item (dictionary) of data here in whatever way you like
print data
except:
print "invalid json: " + line
输出:
{u'content': u'111111', u'a': u'ANOTHER', u't': 1, u'n': u'ITEM 1'}
{u'content': u'222222', u'a': u'ANOTHER', u't': 1, u'n': u'ITEM 2'}
{u'content': u'333333', u'a': u'ANOTHER', u't': 1, u'n': u'ITEM 3'}
第一个选项应该适合大多数情况,即使对于相当大的文件也是如此。