Python - 删除除...之外的所有文件

6

我有一个Python脚本,想要删除该目录下所有文件,但是保留.csv文件。在以下代码中的"not"处出现语法错误:

```python ```
for CleanUp not in glob.glob("c:\python\AIO*.*"):

如果我去掉“not”,它将删除AIO.csv文件,但我需要保留该文件并且仅保留该文件。不清楚为什么它没有起作用。
import os
import glob
import time

file_path = "c:\python\AIO.csv"
while not os.path.exists(file_path):
    time.sleep(10)

if os.path.isfile(file_path):
 #Verifies CSV file was created, then deletes unneeded files.
    for CleanUp not in glob.glob("c:\python\AIO*.*"):
        os.remove(CleanUp)

在for循环中不能使用not关键字,但是可以在if语句中使用。 - SirParselot
你使用什么操作系统? - Cristian Ciupitu
4
这件事情不起作用可能是好事……因为如果它起作用的话,它会删除所有不符合你的全局通配符的文件,包括 c:\windows 等位置的文件。 - Foon
Watchdog 库可以帮助您监视目录,以查看文件何时出现。 - Cristian Ciupitu
2个回答

11

可以尝试使用这个方法

import os
import glob
import time

file_path = "c:\python\AIO.csv"
while not os.path.exists(file_path):
    time.sleep(10)

if os.path.isfile(file_path):
    # Verifies CSV file was created, then deletes unneeded files.
    for clean_up in glob.glob('C:/python/*.*'):
        print(clean_up)
        if not clean_up.endswith('AIO.csv'):    
            os.remove(clean_up)
      

glob函数只会输出文件而不是目录,并且它还会得到完整的路径,因此你可以直接调用os.remove(clean_up)。这应该有效。在我的电脑上也能工作,我的电脑是Windows 7 x64操作系统。

我认为你的问题在于你循环的路径是c:\python\AIO*.*,这是一个文件路径,因此它只会循环一次并终止,从而跳过了目录中的所有其他文件。


最好使用file_path进行比较,而不仅仅是检查结尾(扩展名),因为命名为abc.csv的文件将被跳过。 - Cristian Ciupitu
@user3108489 我已经更新了我的答案,现在应该可以正常工作了。如果还不行,请再次检查是否找到了文件。 - SirParselot
SirParselot - 你是对的。当我把"AIO*."改成了只有.*时,它就起作用了。谢谢你。 - user3108489
@SirParselot,为什么不使用if CleanUp != file_path: os.remove(CleanUp) - Cristian Ciupitu
这个论坛更改了我的最后回复。"当我将"AIO*."更改为".*"时,它起作用了。谢谢你"。 - user3108489
显示剩余6条评论

1
另一种方法是获取文件列表(glob.glob返回一个列表),然后删除您想保留的一个项目。
import os
import glob
import time

file_path = "c:\python\AIO.csv"
while not os.path.exists(file_path):
    time.sleep(10)

if os.path.isfile(file_path):
   # get list of files that match
   cleanupFiles = glob.glob("c:\python\AIO*.*")
   cleanupFiles.remove(file_path)
   for cleanupFile in cleanupFiles:
      os.remove(cleanupFile)

这个方法的行为方式相同。什么也没做。脚本看起来像已经完成了,但它只是停留在内存中(python.exe *32)。我这边肯定出了点问题。 - user3108489

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接