【问题标题】:Adding commas in between JSON objects while writing,在编写时在 JSON 对象之间添加逗号,
【发布时间】:2021-02-17 13:25:44
【问题描述】:

我正在使用 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() 转到最后一个字符之前的字符并将其删除。但这听起来不太好。

如果有任何建议,我将不胜感激,谢谢。

【问题讨论】:

    标签: python json file io ijson


    【解决方案1】:

    理想情况下,在编写时,我可以在每个 json.dump() 的末尾添加一个逗号。但是,我将如何处理最终条目?

    我建议采取不同的观点——而不是在每个元素之后都写逗号,而不是在每个元素之前写逗号。这样在使用生成器正常方式之前next一次就足够了,考虑以下简单示例:我想打印10次A*剪切,然后我可以这样做:

    import itertools
    a10 = itertools.repeat("A", 10)
    print(next(a10), end='')
    for i in a10:
        print('*', end='')
        print(i, end='')
    

    输出:

    A*A*A*A*A*A*A*A*A*A
    

    【讨论】:

      【解决方案2】:

      你试过这个 json.dump(row, temp, indent=4)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-26
        • 2020-09-25
        • 1970-01-01
        • 2019-05-10
        • 1970-01-01
        • 2018-04-18
        • 2017-12-24
        • 1970-01-01
        相关资源
        最近更新 更多