Удалить все файлы, кроме последних двух, соответствующие шаблону - PullRequest
0 голосов
/ 02 июля 2018
import glob
import os
filelist=glob.glob("/home/test/*.txt")
for file in filelist:
  os.remove(file)

Я могу удалить все файлы с помощью приведенного выше кода. Но я не хочу удалять последние 2 файла из 10 текстовых файлов. Остальные из них хотели удалить. Может кто-нибудь помочь мне, пожалуйста?

Edit:

Я пытался 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 голосов
/ 02 июля 2018

Если вы хотите исключить последние 2 элемента из glob, просто измените цикл for:

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

В противном случае вы можете использовать другие ответы для сортировки файлов и исключения последних 2 файлов.

Edit:

python 2 glob

Модуль glob находит все пути, соответствующие указанному шаблону. в соответствии с правилами, используемыми оболочкой Unix, хотя результаты возвращается в произвольном порядке.

Также взгляните на это:

Как заказывается Pythons glob.glob?

0 голосов
/ 02 июля 2018

Вы можете отсортировать 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)
...