Saya memiliki folder dengan sekitar 50.000 file HTML. Saya mencoba menulis skrip yang membuka file dan jika judul berisi string tertentu maka file harus dihapus.

Ini adalah upaya saya sejauh ini:

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())

Tapi saya mendapatkan:

os.close(html) TypeError: an integer is required (got type str)

Tidak tahu fungsi mana yang digunakan untuk menutup dan menghapus setelah dibuka dengan aiofiles?

EDIT - KODE KERJA BERDASARKAN JAWABAN @joao

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.remove(html)
            print("removed: ", html)
    print("Removed: ", i, " pages")

loop = asyncio.get_event_loop()
loop.run_until_complete(main())
0
Harvey 5 April 2021, 17:59

1 menjawab

Jawaban Terbaik

Saya berasumsi Anda menggunakan python >= 3.5, Anda menggunakan aiofiles.open sebagai pengelola konteks, jadi Anda tidak perlu khawatir untuk menutup file sendiri. Yang perlu Anda lakukan hanyalah keluar dari blok manajer konteks, ketika kondisi Anda telah menentukan bahwa file harus dihapus, dan kemudian menghapus file setelah blok manajer konteks (dan ya, os.remove adalah fungsi yang tepat untuk pekerjaan, pastikan Anda tidak memerlukan jalur absolut).

Sayangnya, Anda tidak dapat menggunakan break dengan pengelola konteks, tetapi pertanyaan ini menunjukkan berbagai metode untuk mencapai hasil yang sama.

1
joao 5 April 2021, 15:53