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с диспетчером контекста, но в этом вопросе показаны различные методы достижения того же результата.

Другие вопросы по тегам