在 Python 中保存文件而不关闭它
Saving a file without closing it in Python
假设我有一个要遍历的文件字典。我正在对每个文件做一些处理,然后将其写入报告(注意:不使用 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
看来我可以通过在正确的范围内使用 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"
。
假设我有一个要遍历的文件字典。我正在对每个文件做一些处理,然后将其写入报告(注意:不使用 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
看来我可以通过在正确的范围内使用 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"
。