我有一个for循环,在其中循环访问值并比较两个json文件中的值。当我打印出值时,我正在检查键“文件名”在两个文件之间是否匹配。数据顺序已交换,但值相同。他们没有改变。
CAD_REPEQUEST.pdf JP_CADS.pdf JP_Reports.pdf
我尝试使用CAD_REPEQUEST.pdf
JP_CADS.pdf
JP_Reports.pdf
以升序打印它,但它似乎仍然不起作用。我的JSON文件如下:
dave.json has a match
emhy.json has no match
same.json has no match
值的顺序仍然相同。到目前为止,我的代码如下:
sorted()
答案 0 :(得分:0)
第一个问题-您的day.json和night.json不是json文件,即使名称表明它们是。
由于第一个问题,您无法直接加载它们。您可以通过键分别加载和排序每一行,并与另一个文件中的相应行进行比较。 “文件名”始终位于“文件大小”之前。如果night.json和day.json文件中的顺序不同,则会产生错误的结果。
第三个问题是您同时在文件中查找文件,并在新文件中查找文件,而不是在旧数据中查找文件。如果旧文件存在但新文件丢失怎么办?
如果文件采用这种格式,这就是我要做的
day.json
{"File Name": "dave.json", "File Size": 2800}
{"File Name": "same.json", "File Size": 600}
{"File Name": "emhy.json", "File Size": 600}
{"File Name": "john.json", "File Size": 600}
night.json
{"File Name": "jane.json", "File Size": 2800}
{"File Name": "dave.json", "File Size": 2800}
{"File Name": "emhy.json", "File Size": 600}
{"File Name": "same.json", "File Size": 600}
python代码
import json
def parse_file(file_name):
with open(file_name) as f:
return [json.loads(line)['File Name'] for line in f]
new_data = set(parse_file('day.json'))
old_data = set(parse_file('night.json'))
files_both = new_data.intersection(old_data) # files present in both
files_only_old = old_data.difference(new_data) # files in old, but not in new
files_only_new = new_data.difference(old_data) # files in new, but not in old
print(files_both) # {'emhy.json', 'dave.json', 'same.json'}
print(files_only_old) # {'jane.json'}
print(files_only_new) # {'john.json'}
输出
{'emhy.json', 'dave.json', 'same.json'}
{'jane.json'}
{'john.json'}