我有一个Python程序,每次迭代都会在不同的文件夹中生成大量文件。
每次迭代后,我想删除特定文件夹中的某种文件:例如,应删除所有具有此扩展名*.recode.vcf
的文件。
我试过
os.remove(example.recode.vcf)
...但是由于查找文件的文件夹最终可能包含大量文件,我想知道哪种文件最有效。
作为替代方案,我考虑过调用bash find
函数。有点像...
find . -name \*.recode.vcf -type f -delete
您怎么看?
答案 0 :(得分:4)
如果“效率”是指速度,那么请注意,此操作的速度由文件系统(OS +硬件)决定,而不是实现语言。您可以使用glob
:
from glob import glob # or iglob, see documentation
for f in glob("*.recode.vcf"):
os.remove(f)
(这不会递归到子目录中;请使用os.walk
。)
答案 1 :(得分:1)
首先,在要求解决方案之前,检查您的方法之间是否存在真正的差异。也许没有,你正在浪费时间来解决确实存在的问题。
当您在python中remove一个文件时,它不会自行删除它,而是要求操作系统删除该文件( good )。因此,您可以构建一个简单的函数(或更好的iterator),它将以递归方式返回您删除的文件,它将是您find
的pythonish版本。谁知道,也许find
在python中实现......? (好吧,不是,但可能是)
修改强>
我大个文件的情况,将它们分成不同的目录。而不是将10,000个文件塞进一个目录,最好放100个目录,每个目录100个文件。要平衡文件之间的文件,请从文件名或文件内容的最后两个字母生成文件名(类似于git所做的那样)
答案 2 :(得分:0)
我通常喜欢密切控制我如何删除文件,因此我建议列出您要删除的所有文件,然后将其逐个删除:
import glob, os
myfiles=glob.glob("/mydirectory/*.vcf")
for file in myfiles:
os.remove(file)
干杯,特隆德