Python удалить файл, если он имеет указанный c размер в байтах - PullRequest
0 голосов
/ 17 февраля 2020

В основном пытаемся go более 1000+ файлов в папке и удалять любые дубликаты размеров. Мой метод состоял в том, чтобы l oop просмотреть всю папку за один go, удалив и файлы с точным размером байта, который был замечен в предыдущем файле.

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

import os

def cleanup():
    sizes = [1,2,3] #in bytes

    for fileName in os.listdir(r"C:\Users\Jake\Desktop\testing"): #iterate through all items in directory
        fileDIR = (r"C:\Users\Jake\Desktop\testing" + "\\" + fileName)
        fileSize = os.path.getsize(fileDIR) # get integer value size in bytes of the file

        for i in sizes: #compare the size of the current focused file to the items in the list
            if fileSize == i:
                os.remove(fileName) #If the filesize has been seen before, delete the given file. If not, add the size and go on to next file.
            else:
                sizes.append(fileSize)

cleanup()

1 Ответ

1 голос
/ 17 февраля 2020

Похоже, это связано с тем, как вы перебираете свой список sizes.

Для каждого найденного file вы перебираете весь список и добавляете размер несколько раз.

for i in sizes: заставит вас выполнить итерацию даже после того, как файл будет найден и удален, если он встретится с размером до конца списка.

Вы можете изменить это, просто проверив, найден ли size in sizes.

sizes = []

for filename in os.listdir(r"c:\users\admin\storage\\"):
    file = r"c:\users\admin\storage\\" + filename

    size = os.path.getsize(file)

    if size in sizes:
        print('same size', filename)
    else:
        sizes.append(size)

При первом запуске этого файла в моей собственной папке он возвращает ;

same size static
same size storage

sizes

#[0, 4096, 135168, 554, 102]

Это соответствует правильно, поскольку static и storage равны 0 байтов. При повторном запуске без изменения результата в sizes каждый файл соответствует.

same size .ebextensions
same size customer
same size db.sqlite3
same size manage.py
same size requirements.txt
same size static
same size storage
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...