我正在使用IJSON解析一个非常大的JSON文件,然后将内容写入一个临时文件。之后,我用临时文件的内容覆盖原始文件
FILE_NAME = 'file-name'
DIR_PATH = 'path'
#Generator function that yields dictionary objects.
def constructDictionary():
data = open(os.path.join(DIR_PATH, FILE_NAME + ".json"), "rb")
row = ijson.items(data,'item')
for record in row:
yield record
data.close()
def writeToTemp(row, temp):
#Needs to add a comma
json.dump(row, temp)
def writeTempToFile(temp):
temp.seek(0)
data = open(os.path.join(DIR_PATH, FILE_NAME + ".json"), "wb")
data.write(b'[')
for line in temp:
data.write(line.encode('utf-8'))
data.write(b']')
data.close()
if __name__ == "__main__":
temp = tempfile.NamedTemporaryFile(mode = 'r+')
for row in constructDictionary():
writeToTemp(row,temp)
writeTempToFile(temp)
temp.close()
我的问题是,最终编写的JSON对象之间没有逗号。我无法再次解析文件并添加缺少的逗号,因为这将花费太长的时间。理想情况下,在编写时,我可以在每个json.dump()的末尾添加一个逗号。但是,我该如何处理最后的条目呢
确定生成器函数何时到达文件末尾的某种方法?然后我会使用一个标志或传递一个变量,这样它就不会写最后一个逗号
或者,我可以使用file.seek()转到最后一个字符之前的字符并将其删除。但这听起来不太好
如果您有任何建议,我将不胜感激,谢谢
您是否尝试过这个json.dump(行、临时、缩进=4)
理想情况下,在编写时,我可以在每个json.dump()的末尾添加一个逗号。但是,我该如何处理最后的条目呢
我建议采取不同的观点,而不是在每个元素(但最后一个)之后写逗号,而是在每个元素(但第一个)之前写逗号。这样就足够了^ {CD1>},在使用生成器正常方式之前,考虑以下简单的例子:我想打印10次^ {{CD2}},由^ {CD3>}剪切,然后我可以做:
输出:
相关问题 更多 >
编程相关推荐