浏览所有文件夹和子文件夹以删除所有包含特定字符串的文件

时间:2019-04-10 20:58:38

标签: python python-3.x directory os.walk

我有几个文件夹,每个文件夹包含几个子文件夹,每个文件夹包含5-6个.txt文件,每个文件都有水果列表(苹果,梨,葡萄等)。但是,一些随机的.txt文件却包含“鸡”,并且必须删除。

我正在尝试编写一个程序,该程序将浏览每个文件夹和子文件夹,删除包含字符串“ chicken”的文件,但是由于某种原因,它似乎无法正常工作。

以下是我到目前为止的代码:

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 :(得分:0)

您遇到缩进问题。在for循环中使用以下代码

for line in f:
    if 'chicken' in line:
        found = True
        break

答案 1 :(得分:0)

我不确定在直接删除文件后为什么先中断然后删除。您在代码中的位置正确,但是结构和缩进错误。我希望这有助于解决您的问题。

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