Просмотрите все папки и подпапки, чтобы удалить все файлы, которые содержат определенную строку - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть несколько папок, каждая из которых содержит несколько подпапок, каждая из которых содержит 5-6 файлов .txt со списками фруктов (яблоки, груши, виноград и т. Д.). Несколько случайных файлов .txt содержат «курицу», и должен быть удален.

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

Ниже приведен код, который у меня есть:

import os
DIR = r'C:\Users\Steve\AppData\Local\Programs\Python\Python37-32\fruits'
for parent, dirnames, filenames in os.walk(DIR):
    for fn in filenames:
        found = False
        with open(os.path.join(DIR,filename)) as f:
            for line in f:
                if 'chicken' in line:
                    found = True
                    break
    if found:
        os.remove(os.path.join(DIR, fn))

Я получаю такие ошибки, как

  File <stdin>, line 4, in <module>
FileNotFoundError: [errno 2] No such file or directory:

и я не уверен почему.

Любые предложения о том, как сделать код работоспособным, приветствуются!

Ответы [ 2 ]

0 голосов
/ 11 апреля 2019

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

import os 

root = r'C:\Users\Steve\AppData\Local\Programs\Python\Python37-32\fruits'
for path, subdirs, files in os.walk(root):

    for name in files:
        # get file path 
        file_path = os.path.join(path, name)
        # read content of file 
        with open(file_path) as f:
            content = f.readlines()

        # delete if it include key word
        for line in content: 
            if "chicken" in line:
                os.remove(file_path)
                break
0 голосов
/ 11 апреля 2019

у вас проблема с отступом.Используйте код ниже для цикла

for line in f:
    if 'chicken' in line:
        found = True
        break
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...