从文件夹中循环删除文件,该文件在文件中包含一些特殊文本

时间:2019-01-31 07:55:36

标签: python loops os.path

我的文件夹中包含许多.txt文件。我想从该文件夹中删除文件中包含“ Best Regards”字样的文件。 我编写了简单的循环,但仍然遇到问题I/O operation on closed file

这是我的代码。

import os, os.path
path = 'H:/UsersData/...'

for f in os.listdir(path):
    with open(os.path.join(path, f), encoding = 'utf-8') as input_data:
        for line in input_data:
            if 'Best Regards' in line:
                input_data.close()
                os.remove(os.path.join(path, f))

3 个答案:

答案 0 :(得分:2)

您可以使用检查标记。

EX:

import os, os.path
path = 'H:/UsersData/...'

deleteFile = False
for f in os.listdir(path):
    with open(os.path.join(path, f), encoding = 'utf-8') as input_data:
        for line in input_data:
            if 'Best Regards' in line:
                deleteFile = True
                break
    if deleteFile:
        os.remove(os.path.join(path, f))
        deleteFile = False

答案 1 :(得分:1)

当您找到包含“最佳问候”的行时,您需要中断for循环。使用上下文管理器时,无需显式关闭文件。上下文管理器退出时,该文件将关闭。然后您可以删除文件

import os, os.path
path = 'H:/UsersData/...'

for f in os.listdir(path):
    delete_file = False
    with open(os.path.join(path, f), encoding = 'utf-8') as input_data:
        for line in input_data:
            if 'Best Regards' in line:
                delete_file = True
                break
     if delete_file:
         os.remove(os.path.join(path, f))

答案 2 :(得分:0)

习惯使用pathlib。另外,您还想确保要删除文件,可以通过先建立要删除的文件列表(查看文件以确保语句的逻辑正确)来建立文件列表,然后再删除文件。 Documentation

from pathlib import Path

path = Path('H:/UsersData/...')
files_to_delete = [f for f in path.iterdir() if f.is_file() and 'Best Regards' in f.read_text()]
for f in files_to_delete:
    f.unlink()