我有一个需要从Windows命令行运行的python脚本。该行
for filename in os.listdir(os.getcwd() + "\sampdirectory1\sampdirectory2"):
if filename.startswith("sample.csv"):
os.remove("sample.csv")
一直给我错误
系统找不到指定的"sample.csv
好吧,该文件还不存在,它是第一次在脚本中创建的,然后每次都由脚本编辑。我不明白的是为什么它会在 sample.csv
上尝试执行os.remove
,当 if 语句应该失败时,这意味着不应该达到删除。
您无法在保留它时删除它,因为"在 Windows 上,尝试删除正在使用的文件会导致引发异常"
https://docs.python.org/2/library/os.html#os.remove
两件事需要注意:
第一:文件夹/目的地不同。 你应该使用 os.remove(os.getcwd() + "\sampdirectory1\sampdirectory2" + "sample.csv")
第二:更优雅的解决方案是
try:
os.remove(os.getcwd() + "\sampdirectory1\sampdirectory2" + "sample.csv")
except:
print ('no such file/directory')
pass
可能存在文件.sampdirectory1sampdirectory2sample.csv
,因此条件有效。但是您正在尝试删除不存在的文件.sample.csv
(示例.csv当前目录中),并且收到错误。
此外,可能存在文件.sampdirectory1sampdirectory2sample.csvSOMETHING
,因此条件仍然有效,并且您会收到错误。
你需要做os.remove(filename)
而不是os.remove("sample.csv")
因为首先sample.csv
不是您在删除之前检查它是否存在的文件。甚至文件名也是sample.csv
您需要精确到文件的完整路径。
当您迭代列出目录文件时,您无需检查该文件是否存在。
因此,如果要删除名称以 sample.csv
开头的文件 ,代码应如下所示:
for filename in os.listdir(os.getcwd() + "\sampdirectory1\sampdirectory2"):
if filename.startswith("sample.csv"):
os.remove(filename)
但是如果你只想删除sample.csv
,那么你不需要任何循环。只是做
filename = os.path.join(os.getcwd(), "sampdirectory1\sampdirectory2\sample.csv")
if os.path.exists(filename):
os.remove(filename)