use*_*501 6 python file-io python-3.x
我正在尝试编写一段代码,每次运行 Python3 脚本时都会打开一个新文件。
我正在使用递增的数字构建文件名。
例如,以下是应生成的有效文件名的一些示例:
output_0.csv
output_1.csv
output_2.csv
output_3.csv
Run Code Online (Sandbox Code Playgroud)
下次运行脚本时,下一个要使用的文件名应该是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
Run Code Online (Sandbox Code Playgroud)
如上所述,当尝试打开“读取”模式下不存在的文件时,此代码会崩溃。
使用pathlib,您可以检查当遇到文件或文件的符号链接时,Path.is_file()它会返回。True
from pathlib import Path\n\nfilename_base = "output"\nfilename_ext = "csv"\nfilename_number = 0\n\nfilename_full = f"{filename_base}_{filename_number}.{filename_ext}"\np = Path(filename_full)\n\nwhile p.is_file() or p.is_dir():\n filename_number += 1\n p = Path(f"{filename_base}_{filename_number}.{filename_ext}")\nRun Code Online (Sandbox Code Playgroud)\n当文件\xe2\x80\x99t 存在时,该循环应该退出,以便您可以打开它进行写入。
\n小智 1
您可以使用 OS 模块检查文件路径是否是文件,然后打开它:
import os
file_path = './file.csv'
if(os.path.isfile(file_path)):
with open(file_path, "r") as f:
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2291 次 |
| 最近记录: |