我的文件夹中包含许多.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))
答案 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()