Python 文件名如果语句不起作用



我有一个需要从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)

最新更新