我正在尝试更好,更清晰,更短的方式来打开多个JSON编码的文本文件。当所有这些文件都存在时,很容易将它放在一个try
代码中。
但是当文件不存在时,其他文件将不会被打开。
此外,每个文本文件都包含一个字典,需要通过json.load
将其导入到唯一的字典中。
我现在的代码如下:
dict1 = {}
while True:
try:
dict1 = json.load(open("temp/dict 1.txt"))
break
except (FileNotFoundError, IOError):
break
else:
break
dict2 = {}
while True:
try:
dict2 = json.load(open("temp/dict 2.txt"))
break
except (FileNotFoundError, IOError):
break
else:
break
dict3 = {}
while True:
try:
dict3 = json.load(open("temp/dict 3.txt"))
break
except (FileNotFoundError, IOError):
break
else:
break
这个问题也与另一个问题挂钩,在另一个主题中提到: Searching for a more elegant (less code) way to compare multiple dicts
也许我面临的这些问题还有另一种解决方案。
答案 0 :(得分:0)
问题是你正在使用休息,这会在第一次失败时停止。您应该做的是忽略错误并在文件不存在时转到下一个文件。我还建议您将字典存储在由文件名引用的数组或字典中,而不是单独的值。所以你的代码看起来像这样:
filenames = ['path1', 'path2']
loaded = {}
for fp in filenames:
try:
with open(fp, 'r') as pointer:
loaded[fp] = json.load(pointer)
except (FileNotFoundError, IOError):
continue