试图缩短打开多个文本文件的方法

时间:2017-12-19 00:01:23

标签: python json

我正在尝试更好,更清晰,更短的方式来打开多个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

也许我面临的这些问题还有另一种解决方案。

1 个答案:

答案 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