每次替换文件中的Python字符串都会产生不同的结果

时间:2018-07-01 10:03:55

标签: json string python-3.x replace

我有一个JSON文件,我想在其中进行一些替换。我已经编写了一个代码,它可以工作,但是没什么。

这是完成替换的地方。

replacements1 = {builtTelefon:'Isim', builtIlce:'Isim', builtAdres:'Isim', builtIsim:'Isim'}
replacements3 = {builtYesterdayTelefon:'Isim', builtYesterdayIlce:'Isim', builtYesterdayAdres:'Isim', builtYesterdayIsim:'Isim'}

with open('veri3.json', encoding='utf-8') as infile, open('veri2.json', 'w') as outfile:
for line in infile:
    for src, target in replacements1.items():
        line = line.replace(src, target)
    for src, target in replacements3.items():
        line = line.replace(src, target)
    outfile.write(line)

以下是builtAdresbuiltYesterdayAdres的示例:

01 Temmuz 2018 Pazar.1
30 Haziran 2018 Cumartesi.1

我对数据运行此操作,但每次都会导致许多不同的输出。请检查下面的屏幕截图,因为我不知道我还能怎么说。

这是完全相同的代码,我每次都运行相同的东西,但是每次都会导致不同的结果。

imgur mirror of the problem

这是原始的JSON文件:

imgur mirror of original file

它应该做的是针对01 Temmuz 2018 Pazar测试整个文件,如果发现则将其替换为字符串Isim,而无需进行其他操作。在第二次运行时,检查是否有30 Haziran 2018 Cumartesi,并用字符串Isim替换它们。

这是什么原因造成的?

用于重新测试的示例文件:

pastebin - veri3.json

pastebin - code.py

1 个答案:

答案 0 :(得分:1)

我认为您只有一个问题:您试图在同一对象中多次使用“ Isim”作为键名,这会破坏JSON。
之所以“获得不同的结果”,可能与您用来显示JSON的客户端有关。我认为,如果您查看原始数据,则JSON应该已经完全更改(我运行了脚本,而且似乎已更改)。但是,客户端将无法很好地处理重复键,并且将尽可能显示所有对象。
实际上,我不确定如何将“ Isim.1”,“ Isim.2”用作键,因为您实际上对全部使用了“ Isim”。客户必须设法解决那里的重复性问题。

尝试以下代码,在此我使用“ Isim.1”,“ Isim.2”等:

replacements1 = {builtTelefon:'Isim.3', builtIlce:'Isim.2', builtAdres:'Isim.1', builtIsim:'Isim'}
replacements3 = {builtYesterdayTelefon:'Isim.3', builtYesterdayIlce:'Isim.2', builtYesterdayAdres:'Isim.1', builtYesterdayIsim:'Isim'}

我认为您现在应该可以显示所有键。

哦和PS:要在您的语言环境中使用您的代码,我必须更改第124行以将'utf-8'指定为输出文件的编码:

with open('veri3.json', encoding='utf-8') as infile, open('veri2.json', 'w', encoding='utf-8') as outfile: