aiofiles - Удаляет файлы в папке, удовлетворяющей критериям
У меня есть папка с примерно 50 000 HTML-файлов. Я пытаюсь написать сценарий, который открывает файл, и если заголовок содержит определенную строку, файл следует удалить.
Это моя попытка:
import aiofiles
import glob
from natsort import natsorted
import asyncio
from bs4 import BeautifulSoup
import os
async def main():
i=0
htmls = glob.glob("CarsPages" + "//*.html")
for html in natsorted(htmls):
async with aiofiles.open(html, mode='r', encoding='UTF-8', errors='strict', buffering=1) as f:
contents = await f.read()
soup = BeautifulSoup(contents, features="lxml")
if "Best portal" in soup.title.get_text():
i+=1
os.close(html)
os.remove(html)
print("removing: ", html)
print("Removed: ", i, " pages")
loop = asyncio.get_event_loop()
loop.run_until_complete(main())
Но я получаю:
os.close(html) TypeError: an integer is required (got type str)
Не знаете, какие функции использовать для закрытия и удаления после открытия с помощью aiofiles?
1 ответ
Я предполагаю, что вы используете python>= 3.5, вы используете
aiofiles.open
в качестве диспетчера контекста, поэтому вам не нужно беспокоиться о закрытии файла самостоятельно. Что вам нужно сделать, это просто выйти из блока диспетчера контекста, когда ваше условие определило, что файл должен быть удален, а затем удалить файл после блока диспетчера контекста (и да,
os.remove
является подходящей функцией для работы, просто убедитесь, что вам не нужен абсолютный путь).
К сожалению, вы не можете использовать
break
с диспетчером контекста, но в этом вопросе показаны различные методы достижения того же результата.