1

我有一个 Python 程序,它为每次迭代在不同的文件夹中生成大量文件。每次迭代后,我想删除特定文件夹中的某种文件:例如,*.recode.vcf应删除所有具有此扩展名的文件。

我试过了

os.remove(example.recode.vcf)

...但是由于正在查找文件的文件夹最终可能包含大量文件,我想知道哪种方法是最有效的方法。作为替代方案,我考虑过调用 bashfind函数。就像是...

find . -name \*.recode.vcf -type f -delete

你怎么看?

4

3 回答 3

4

如果“效率”是指速度,那么请注意此操作的速度是由文件系统(操作系统 + 硬件)决定的,而不是由实现语言决定的。您可以使用以下命令轻松删除一堆文件glob

from glob import glob  # or iglob, see documentation

for f in glob("*.recode.vcf"):
    os.remove(f)

(这不会递归到子目录;os.walk用于那个。)

于 2013-04-25T13:12:37.427 回答
1

首先,在寻求解决方案之前,检查您的方法之间是否真的存在差异。也许没有,您正在浪费时间来解决确实存在的问题。

当您在 python中删除一个文件时,它不会自行删除它,而是要求操作系统友好地删除该文件(这很好)。因此,您可以构建一个简单的函数(或者更好的是iterator),它将递归地返回您删除的文件,这将是您的 Python 版本的find. 谁知道,也许find是用python实现的……?(好吧好吧,它不是,但它可能是)

请参阅其他答案中提到的walkglob

编辑:

如果有大量文件,请将它们分成不同的目录。与其将 10,000 个文件塞进一个目录,不如将 100 个目录和每个 100 个文件放在一起。为了在 dirs 之间平等地平衡文件,从例如文件名或文件内容哈希的最后两个字母生成文件名(类似于git所做的)

于 2013-04-25T13:33:00.167 回答
0

我通常喜欢密切控制我如何删除文件,所以我建议列出你要删除的所有文件,然后像这样一个一个地删除它们:

import glob, os
myfiles=glob.glob("/mydirectory/*.vcf")
for file in myfiles:
  os.remove(file)

干杯,特隆德

于 2013-04-25T13:14:53.067 回答