保存文件而不在Python中关闭文件

时间:2018-11-05 15:14:56

标签: python-2.7 file file-writing saving-data

假设我有一个要遍历的文件字典。我正在处理每个文件,然后将其写入报告(注意:不使用csv mod)。

file_list = ['f1', 'f2', 'f3', 'f4']
report  = "C:/reports/report_%s"%(timestamp)
r = open(report, "w')

如果f3中发生的某些事情导致脚本在完成之前崩溃,该怎么办。我可以使用try-catch处理错误,但是我不想只关闭报告。也许我希望脚本继续。脚本运行时可能发生电源故障。也许有多个try-catch语句,但我不想为每个错误关闭。本质上,我只想保存文件而不在列表的每次迭代时都将其关闭,因此,如果发生崩溃,我仍然可以检索到报表的数据。我怎样才能做到这一点?我不能简单地做report.save(),对吗?我曾考虑过将flush()os.fsync()一起使用,如另一个question所述,但是我不确定100%适用于我的情况。关于如何在这里实现我的目标有什么建议吗?

try:
    ....do stuff...
    report.write(<stuff_output> + "\n")
    try:
        ....do more stuff....
        report.write(<stuff_output> + "\n")
    except:
        continue
    report.close()
except Exception as e:
    pass

1 个答案:

答案 0 :(得分:0)

看来,只要在正确的范围内使用flush()os.fsync(),然后将r.close()放在尝试之外,就可以解决此问题。因此,即使尝试失败,它也会通过或继续,最后关闭:

try:
    for item in file_list:
        try:
            r.write("This is item: " + item + "\n")

        except:
            r.flush()
            os.fsync(r)
            continue

except Exception as e:
    pass

r.close()

这将始终将"This is item: f1", "This is item: f2", "This is item: f3"打印到报告中。