奇怪的附加到 python 中的 Json

Weird appending to Json in python

提问人:Felipe Palermo 提问时间:8/3/2022 最后编辑:Veysel OlgunFelipe Palermo 更新时间:8/4/2022 访问量:49

问:

我需要在 9000 个 json 文件中附加一个新行,所以,我想自动化它。我需要在“名称”和“描述”之间加上新行,但每次我尝试这样做时,它都会给我一个奇怪的结果。

示例文件

试图搜索如何做到这一点,但我没有得到任何好的结果。

enter image description here

enter image description here

python-3.x 文件- io

评论

0赞 Rabinzel 8/3/2022
请添加一些 JSON 文件的示例数据
1赞 Fiddling Bits 8/3/2022
修改后做一个 和 不是更好吗?json.dumps()json.loads()
1赞 quamrana 8/3/2022
使用永远不会在文件中插入任何内容,只会覆盖内容。您需要读取整个文件,用于解码它并插入您的数据作为新密钥,然后用于再次写出整个文件。file.write()json.load()json.dump()
0赞 Fiddling Bits 8/3/2022
你怎么样了? 小于此。56strlen("{\n \"tokenId\": 1,\n \"name\": \"a 1\",\n")
0赞 tdelaney 8/3/2022
它覆盖了“描述”这一事实意味着您没有正确使用偏移量。但是无论如何,您都不能安全地将偏移量用于 python 中的非二进制文件。你可以打开二进制文件,寻找你想要插入的位置,假设要插入 N 个字节,你需要将文件的整个其余部分向前复制 N 个字节,然后返回并复制你的东西。它很棘手,而且非常脆弱。json.load 然后添加,然后 json.dump 更容易、更安全。

答:

0赞 Felipe Palermo 8/4/2022 #1

问题解决了。

基本上,我知道我可以将所有行存储在一个列表中,并重写文件。

现在,我打开文件,存储数据,将字符串中的文本添加到列表中,然后使用文本重写文件。

# The files i need to work with have numbers as names
# it make the process easy 
fileIndex = 1 


# We will use that number in the string Nlink
Number = 1


while fileIndex < 6 :

# Formated strings cant be used directly on list
NLink = f'    "Link" : "https://Link_placeHolder/{Number}.jpg",\n'

# Link stores the data, and we can use this on our list
Link = NLink


# Openning your file for reading to store the lines
with open(f"C:\\Cteste\\Original\\{fileIndex}.json", "r+") as f:
    
    # Create an list with all string information of the file
    lines = f.readlines()


    # Open a new file for writing 
    with open(f"C:\\Cteste\\New\\{fileIndex}.json", "w")as f2 :

        
        # Insert the link at especifc position in the list
        # in my case  index 2
        lines.insert(2, Link)


        # Write everything on the file, them close the files
        for i in lines :
            f2.write(i)


# add to index
fileIndex += 1

# add to number
Number += 1