如何从网络获取内容并将字节转换为str/json

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

我有一个非常大的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新手,有时需要花很多时间来诊断问题本身。

谢谢大家!

python json list tuples
1个回答
0
投票

这两个解决方案都适合我,并假设文件采用上面示例中的格式。 不过,这取决于您从文件加载数据后想要如何处理这些数据(您没有指定这一点)。

首先,简单/快速版本最终将所有数据放在一个列表(字典列表)中:

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'}

第一个选项应该适合大多数情况,即使对于相当大的文件也是如此。

© www.soinside.com 2019 - 2024. All rights reserved.