删除与通配符匹配的所有文件,但最后两个文件除外

时间:2018-07-02 07:16:25

标签: python delete-file

import glob
import os
filelist=glob.glob("/home/test/*.txt")
for file in filelist:
  os.remove(file)

我能够通过上述代码删除所有文件。但是我不想删除10个txt文件中的最新2个文件。其余的文件都想删除。 有人可以帮我吗?

编辑:

我尝试index排除最后2个文件,得到了不同的输出。文件

-rwxrwxr-x 1 test1 test 14 May 27 2015 test.txt 
-rw-r--r-- 1 test1 test 1857 Nov 9 2016 list.txt 
-rw-r--r-- 1 test1 test 140 Jun 8 22:09 check.txt 
-rw-r--r-- 1 test1 test 570 Jun 8 22:12 ert.txt 
-rw-r--r-- 1 test1 test 0 Jul 2 03:17 1.txt 
-rw-r--r-- 1 test1 test 0 Jul 2 03:17 2.txt 

我的新代码是:

import glob import os 
filelist=glob.glob("/home/test/*.txt") 
for file in filelist[:-2]: 
    print file 

输出

> /home/test/1.txt 
> /home/test/2.txt
> /home/test/list.txt  
> /home/test/ert.txt

2 个答案:

答案 0 :(得分:2)

您可以使用filelist作为排序键来对os.stat(f).st_mtime进行排序:

filelist = sorted(filelist, key=lambda f: os.stat(f).st_mtime)

此后,您遍历文件列表,最后两个文件除外:

for f in filelist[:-2]:
    os.remove(f)

答案 1 :(得分:1)

如果要排除glob机器中的最后2个项目,只需更改您的for循环:

import glob
import os
filelist=glob.glob("/home/test/*.txt")
for file in filelist[:-2]:
  os.remove(file)

否则,您可以使用其他答案对文件进行排序,并排除最后2个文件。

编辑:

python 2 glob

  

glob模块找到与指定模式匹配的所有路径名   根据Unix Shell使用的规则,尽管结果是   返回任意顺序。

也看看这个:

How is Pythons glob.glob ordered?