Python 将json文件追加到文本文件

Python 将json文件追加到文本文件,python,json,Python,Json,我有一个列表,其中每个元素都是json文件的路径。我正在使用以下代码写入文本文件: list=['C:/Users/JAYANTH/Desktop/datasets/580317556516483072/source- tweet/580317556516483072.json', 'C:/Users/JAYANTH/Desktop/datasets/580317998147325952/source- tweet/580317998147325952.json', ..........]

我有一个列表,其中每个元素都是json文件的路径。我正在使用以下代码写入文本文件:

list=['C:/Users/JAYANTH/Desktop/datasets/580317556516483072/source-
tweet/580317556516483072.json', 
'C:/Users/JAYANTH/Desktop/datasets/580317998147325952/source-
tweet/580317998147325952.json', 
..........]
file=open("abc.txt","a")
for i in range(len(list))
    with open(list[i]) as f:
        u=json.load(f)
        s=json.dumps(u)
        file.write(s)
file.close()
此代码将json文件中的数据附加到txt文件中。尝试使用以下代码从同一文件读取数据时:

with open('abc.txt','r') as f:
    for each in f:
        print(json.load(file))
我得到以下错误:

Traceback (most recent call last):
  File "C:\Users\JAYANTH\Desktop\proj\apr25.py", line 15, in <module>
    print(json.load(file))
  File "C:\Users\JAYANTH\Desktop\proj\lib\json\__init__.py", line 268, in 
   load
    parse_constant=parse_constant, object_pairs_hook=object_pairs_hook, 
  **kw)
  File "C:\Users\JAYANTH\Desktop\proj\lib\json\__init__.py", line 319, in 
  loads
    return _default_decoder.decode(s)
  File "C:\Users\JAYANTH\Desktop\proj\lib\json\decoder.py", line 339, in 
  decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Users\JAYANTH\Desktop\proj\lib\json\decoder.py", line 357, in 
  raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
回溯(最近一次呼叫最后一次):
文件“C:\Users\JAYANTH\Desktop\proj\apr25.py”,第15行,在
打印(json.load(文件))
文件“C:\Users\JAYANTH\Desktop\proj\lib\json\\uuuu init\uuuu.py”,第268行,在
负载
parse_常量=parse_常量,object_pairs_hook=object_pairs_hook,
**千瓦)
文件“C:\Users\JAYANTH\Desktop\proj\lib\json\\uuuu init\uuuu.py”,第319行,在
荷载
返回\u默认\u解码器。解码
文件“C:\Users\JAYANTH\Desktop\proj\lib\json\decoder.py”,第339行,在
解码
obj,end=self.raw\u decode(s,idx=\u w(s,0.end())
文件“C:\Users\JAYANTH\Desktop\proj\lib\json\decoder.py”,第357行,在
原始解码
从None引发JSONDecodeError(“预期值”,s,err.value)
json.decoder.JSONDecodeError:预期值:第1行第1列(字符0)
我也尝试过使用json.loads,但出现了一个错误:

Traceback (most recent call last):
  File "C:\Users\JAYANTH\Desktop\proj\apr25.py", line 15, in <module>
    print(json.loads(file))
  File "C:\Users\JAYANTH\Desktop\proj\lib\json\__init__.py", line 312, in 
  loads
    s.__class__.__name__))
TypeError: the JSON object must be str, not 'TextIOWrapper'
回溯(最近一次呼叫最后一次):
文件“C:\Users\JAYANTH\Desktop\proj\apr25.py”,第15行,在
打印(json.loads(文件))
文件“C:\Users\JAYANTH\Desktop\proj\lib\json\\uuuu init\uuuu.py”,第312行,在
荷载
s、 _u_类________;名称____;)
TypeError:JSON对象必须是str,而不是“TextIOWrapper”

如何解决这个问题?

json的串联不是json,句号。此文件是有效的Json:

[ 1, 2 ,
  { "a": "b" },
  3 ]
给这个Python对象:
[1,2,{'a':'b'},3]

但这不再是有效的json文件:

[ 1, 2 ,
  { "a": "b" },
  3 ]
[ 1, 2 ,
  { "a": "b" },
  3 ]
因为它包含2个没有关系的对象

您应将所有内容包含在外部列表中,以使其有效:

[
[ 1, 2 ,
  { "a": "b" },
  3 ]
,
[ 1, 2 ,
  { "a": "b" },
  3 ]
]
因此,您生成的代码应该是:

file=open("abc.txt","a")
file.write("[\n")            # start of a list
first = True
for i in range(len(list))
    if first: 
        first = False
    else: 
        file.write(",\n")    # add a separating comma before every element but the first one
    with open(list[i]) as f:
        u=json.load(f)
        s=json.dumps(u)
        file.write(s)
file.write("]\n")            # terminate the list

file.close()

当您阅读“abc.txt”时,为什么会有for循环。只需要打印(json.load(f))为什么要这样做?您可以创建一个外部列表,将每个单独的json对象附加到这个外部列表中,这个外部列表本身就成为一个单一的、有效的json对象。然后把它写进一个文件。