


Strategi untuk mencari subfolder yang ditentukan dengan cekap di Python: Aplikasi dan Pengoptimuman OS.SCANDIR
Oct 12, 2025 am 09:48 AMKemunculan prestasi kaedah pengimbasan direktori tradisional
Di Python, cara yang sama untuk menghitung kandungan direktori adalah menggunakan os.listdir (). Walau bagaimanapun, pendekatan ini boleh mengalami masalah prestasi yang signifikan apabila berurusan dengan direktori yang sangat besar yang mengandungi ratusan ribu atau lebih fail dan subfolder. Sebab utama adalah:
- Dua Sistem Panggilan Overhead : OS.LISTDIR () akan terlebih dahulu mendapatkan senarai nama semua fail dan folder di bawah laluan yang ditentukan. Seterusnya, untuk menentukan sama ada setiap entri adalah direktori (contohnya, menggunakan os.path.isdir ()), program perlu membuat panggilan sistem berasingan untuk setiap nama dalam senarai untuk mendapatkan metadata. Ini bermakna bahawa untuk penyertaan N, n sistem tambahan panggilan ke os.path.isdir () akan dihasilkan, menghasilkan sejumlah besar operasi I/O dan penggunaan masa.
- Penggunaan Memori : OS.LISTDIR () memuat semua nama kemasukan dalam direktori ke dalam memori sekaligus, yang mungkin mengakibatkan penggunaan memori yang signifikan untuk direktori yang mengandungi sejumlah besar penyertaan.
- Pencocokan ungkapan biasa : Selepas mendapatkan semua penyertaan, penapis melalui ekspresi biasa. Walaupun berkuasa, untuk data besar -besaran, setiap perlawanan masih akan meningkatkan beban pengiraan.
Berikut adalah contoh pelaksanaan warisan biasa yang boleh menyebabkan masalah prestasi:
Import OS Import Re def find_subfolders_inefficient (dir_of_interest, start_string_of_interest): # 1. Dapatkan semua nama fail dan folder all_entries = os.listdir (dir_of_interest) # 2. Tapis semua subfolder (setiap os.path.isdir () adalah panggilan sistem) all_subfolders = [ Item untuk item dalam all_entries jika os.path.isdir (os.path.join (dir_of_interest, item)) ] # 3. Gunakan ungkapan biasa untuk dipadankan dengan regexp_pattern = re.compile (start_string_of_interest) all_subfolders_of_interest = senarai (penapis (regexp_pattern.match, all_subfolders)) kembali all_subfolders_of_interest # Contoh panggilan # subfolder = find_subfolders_inefficient ('Path/to/large/folder', 'prefix_')
OS.SCANDIR: Iterator Direktori Cekap
Untuk menyelesaikan kesesakan prestasi di atas, Python 3.5 memperkenalkan fungsi OS.Scandir (). os.scandir () menyediakan iTerator direktori yang lebih cekap. Kelebihan terasnya adalah:
- Kurangkan panggilan sistem : os.scandir () mengembalikan iterator, dan setiap lelaran menghasilkan objek os.direntry. Objek Direntry ini cache jenis fail dan statistik (seperti sama ada direktori, fail, dll.) Apabila ia dibuat, jadi tidak perlu menghubungi os.path.isdir () atau os.path.isfile () untuk mendapatkan maklumat ini. Ini sangat mengurangkan bilangan pertanyaan kepada sistem fail.
- Corak Iterator : OS.SCANDIR () tidak memuat semua penyertaan ke dalam memori sekaligus, tetapi menghasilkan objek pengkhianatan satu demi satu atas permintaan. Ini menjadikannya sangat memori yang cekap apabila mengendalikan direktori yang sangat besar.
- Akses Langsung ke Atribut : Objek Direntry menyediakan kaedah dan atribut seperti nama (nama fail/nama folder), jalan (laluan penuh), is_dir (), is_file (), dan sebagainya, yang boleh digunakan secara langsung untuk menentukan dan mendapatkan maklumat.
Pelaksanaan yang dioptimumkan: Gunakan os.scandir untuk mencari subfolder
Menggunakan os.scandir () untuk mengoptimumkan logik mencari subfolder yang ditentukan dapat meningkatkan prestasi dengan ketara. Berikut adalah pelaksanaan yang dioptimumkan berdasarkan os.scandir ():
Import OS def find_subfolders_efficient (dir_of_interest, start_string_of_interest): "" " Gunakan os.scandir untuk mencari subfolder dengan cekap bermula dengan rentetan tertentu dalam direktori yang ditentukan. Args: dir_of_interest (str): Laluan direktori untuk diimbas. start_string_of_interest (str): Rentetan permulaan yang sepadan dengan nama subfolder. Pulangan: Senarai: Senarai nama subfolder yang sepadan. "" " all_subfolders_of_interest = [] Cuba: # Melepasi penyertaan direktori dengan os.scandir (dir_of_interest) sebagai penyertaan: untuk kemasukan dalam penyertaan: # Periksa sama ada direktori dan nama sepadan dengan awalan # entry.is_dir () mengelakkan panggilan sistem tambahan # entry.name mendapat nama secara langsung dan mengelakkan splicing jalan jika entry.is_dir () dan entry.startswith (start_string_of_interest): all_subfolders_of_interest.append (entry.name) Kecuali FileNotFoundError: cetak (f "ralat: direktori '{dir_of_interest}' tidak wujud.") excepmissionerror: cetak (f "ralat: tiada kebenaran untuk mengakses direktori '{dir_of_interest}'.") Kecuali pengecualian sebagai e: cetak (f "ralat yang tidak diketahui berlaku semasa mengimbas direktori: {e}") kembali all_subfolders_of_interest # Contoh panggilan jika __name__ == '__main__': # Buat struktur direktori ujian (pilihan) # os.makedirs ('test_large_folder/prefix_sub1', exist_ok = true) # os.makedirs ('test_large_folder/lain_sub', ada_ok = benar) # os.makedirs ('test_large_folder/prefix_sub2', exist_ok = true) # dengan terbuka ('test_large_folder/file.txt', 'w') sebagai f: # f.write ("ujian") target_dir = 'test_large_folder' # Gantikan dengan direktori sebenar anda carian_prefix = 'prefix_' cetak (f "mencari subfolder bermula dengan '{search_prefix}' dalam {target_dir} ...") found_subfolders = find_subfolders_efficient (target_dir, search_prefix) Sekiranya found_subfolders: Cetak ("Subfolder berikut dijumpai:") Untuk folder di found_subfolders: cetak (f "- {folder}") lain: Cetak ("Tiada subfolder yang sepadan dijumpai.")
Dalam kod di atas, apabila kita secara langsung melelehkan objek Direntry yang dikembalikan oleh OS.Scandir, kita menggunakan kaedah entry.is_dir () untuk menentukan sama ada direktori, dan gunakan entry.name.startSwith () untuk pemadanan nama. Pendekatan ini menggabungkan penentuan jenis fail dan penapisan nama ke dalam satu gelung, mengelakkan pelbagai ciptaan senarai dan panggilan sistem tambahan, menghasilkan peningkatan prestasi yang signifikan.
Perkara yang perlu diperhatikan dan amalan terbaik
- Pengendalian ralat : Dalam aplikasi sebenar, situasi yang tidak normal seperti fail atau direktori yang tidak wujud dan kebenaran yang tidak mencukupi harus selalu dipertimbangkan dan pengendalian ralat yang sesuai harus dilakukan, seperti blok percubaan dalam kod sampel.
- Pengurusan Sumber : Iterator yang dikembalikan oleh OS.Scandir () adalah sumber sistem fail. Adalah disyorkan untuk menggunakan pernyataan dengan memastikan bahawa iterator ditutup dengan betul selepas penggunaan dan sumber boleh dikeluarkan walaupun pengecualian berlaku.
- Keserasian Cross-Platform : OS.Scandir () adalah silang platform dan berfungsi dengan betul pada Windows, Linux dan MacOS.
- Menggabungkan dengan Pathlib : Untuk operasi sistem fail python yang lebih moden, pertimbangkan untuk menggabungkan dengan modul Pathlib. Objek PathLib.Path juga menyediakan kaedah iterdir (), dan lapisan asasnya biasanya dilaksanakan berdasarkan OS.Scandir, menyediakan API yang lebih berorientasikan objek.
Meringkaskan
OS.Scandir () adalah alat pengoptimuman yang sangat diperlukan apabila berurusan dengan tugas pengimbasan direktori berskala besar di Python. Ia secara signifikan meningkatkan prestasi dan kecekapan memori operasi sistem fail dengan menyediakan iTerator direktori yang cekap, maklumat jenis fail caching, dan mengelakkan panggilan sistem yang tidak perlu. Berhijrah dari gabungan os.listdir dan os.path.isdir ke os.scandir adalah langkah utama dalam mengoptimumkan interaksi sistem fail python, terutamanya untuk senario di mana fail atau direktori tertentu perlu diambil dengan cepat.
Atas ialah kandungan terperinci Strategi untuk mencari subfolder yang ditentukan dengan cekap di Python: Aplikasi dan Pengoptimuman OS.SCANDIR. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undress AI Tool
Gambar buka pakaian secara percuma

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Stock Market GPT
Penyelidikan pelaburan dikuasakan AI untuk keputusan yang lebih bijak

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Tutorial ini memperincikan bagaimana untuk menggabungkan penyesuai LORA PEFT dengan model asas untuk menghasilkan model yang sepenuhnya bebas. Artikel ini menunjukkan bahawa adalah salah untuk menggunakan transformer.automodel secara langsung untuk memuatkan penyesuai dan menggabungkan berat secara manual, dan menyediakan proses yang betul untuk menggunakan kaedah Merge_and_unload di perpustakaan PEFT. Di samping itu, tutorial juga menekankan pentingnya menangani segmen perkataan dan membincangkan isu dan penyelesaian keserasian versi PEFT.

Jalankan pipinstall-rrequirements.txt untuk memasang pakej ketergantungan. Adalah disyorkan untuk mencipta dan mengaktifkan persekitaran maya terlebih dahulu untuk mengelakkan konflik, memastikan bahawa laluan fail adalah betul dan PIP telah dikemas kini, dan menggunakan pilihan seperti-tidak-deps atau-pengguna untuk menyesuaikan tingkah laku pemasangan jika perlu.

Python adalah alat ujian yang mudah dan berkuasa di Python. Selepas pemasangan, fail ujian ditemui secara automatik mengikut peraturan penamaan. Tulis fungsi bermula dengan ujian untuk ujian pernyataan, gunakan @pytest.fixture untuk membuat data ujian yang boleh diguna semula, mengesahkan pengecualian melalui pytest.raises, menyokong menjalankan ujian tertentu dan pelbagai pilihan baris arahan, dan meningkatkan kecekapan ujian.

TheargParsemoduleisThereMendingWayOhandLecommand-lineargumentsinpython, menyediakan robrobustparsing, typevalidation, helpmessages, anderrorhandling; usesy.argvforsimplecasesrequiringminiminalsetup.

Artikel ini bertujuan untuk meneroka masalah biasa ketepatan pengiraan yang tidak mencukupi bagi nombor titik terapung di Python dan Numpy, dan menjelaskan bahawa punca akarnya terletak pada batasan perwakilan nombor terapung 64-bit standard. Untuk senario pengkomputeran yang memerlukan ketepatan yang lebih tinggi, artikel itu akan memperkenalkan dan membandingkan kaedah penggunaan, ciri-ciri dan senario yang berkenaan dengan perpustakaan matematik ketepatan tinggi seperti MPMATH, SYMPY dan GMPY untuk membantu pembaca memilih alat yang tepat untuk menyelesaikan keperluan ketepatan yang rumit.

Artikel ini memperincikan cara menggunakan fungsi Merge_and_unload Perpustakaan PEFT untuk menggabungkan penyesuai LORA secara efisien dan tepat ke dalam model bahasa asas yang besar, dengan itu mewujudkan model baru dengan pengetahuan penalaan yang bersepadu. Artikel ini membetulkan kesalahpahaman umum tentang memuatkan penyesuai dan menggabungkan berat model secara manual melalui transformer.automodel, dan menyediakan contoh kod lengkap termasuk penggabungan model, pemprosesan segmen perkataan, dan panduan profesional untuk menyelesaikan masalah keserasian versi berpotensi untuk memastikan proses penggabungan yang lancar.

Import@contextManagerFromContextLibandDefineageneratorfunctionThatTyieldSexactlyonce, whereCodeBeforeyieldActSasenterandCodeAfteryield (PreferitlySinfinal) actsas __

PYPDF2, PDFPlumber dan FPDF adalah perpustakaan teras untuk Python untuk memproses PDF. Gunakan pypdf2 untuk melakukan pengekstrakan teks, penggabungan, pemisahan dan penyulitan, seperti membaca halaman melalui pdfreader dan memanggil extract_text () untuk mendapatkan kandungan; PDFplumber lebih sesuai untuk mengekalkan pengekstrakan teks susun atur dan pengiktirafan jadual, dan menyokong extract_tables () untuk menangkap data jadual dengan tepat; FPDF (disyorkan FPDF2) digunakan untuk menjana PDF, dan dokumen dibina dan dikeluarkan melalui add_page (), set_font () dan sel (). Apabila menggabungkan PDF, kaedah tambahan PDFWriter () dapat mengintegrasikan pelbagai fail
