【发布时间】:2021-09-19 19:29:06
【问题描述】:
我正在尝试编写一段代码,每次运行 Python3 脚本时都会打开一个新文件。
我正在使用递增的数字构造文件名。
例如,以下是一些应生成的有效文件名示例:
output_0.csv
output_1.csv
output_2.csv
output_3.csv
在下一次运行脚本时,下一个要使用的文件名应该是output_4.csv。
在 C/C++ 中,我将通过以下方式执行此操作:
- 进入无限循环
- 尝试以“读取”模式打开第一个文件名
- 如果文件已打开,请增加文件名编号并重复
- 如果文件未打开,则跳出循环并以“写入”模式重新打开文件
这在 Python 3 中似乎不起作用,因为以读取模式打开一个不存在的文件会引发异常。
一种可能的解决方案是将打开的文件代码块移动到 try-catch 块中。但这似乎不是一个特别优雅的解决方案。
这是我迄今为止在代码中尝试过的内容
# open a file to store output data
filename_base = "output"
filename_ext = "csv"
filename_number = 0
while True:
filename_full = f"{filename_base}_{filename_number}.{filename_ext}"
with open(filename_full, "r") as f:
if f.closed:
print(f"Writing data to {filename_full}")
break
else:
print(f"File {filename_full} exists")
filename_number += 1
with open(filename_full, "w") as f:
pass
如上所述,此代码在尝试打开“读取”模式下不存在的文件时会崩溃。
【问题讨论】:
-
例外是通知您“如果文件未打开”。捕捉异常就是你检查它的方式。这没有什么不雅的。
标签: python python-3.x file-io