Memeriksa Fail Teks untuk Kerangkuman Rentetan
Pertimbangkan senario di mana anda ingin memastikan kehadiran rentetan tertentu dalam fail teks. Apabila ia dikenal pasti, tindakan tertentu (X) hendaklah dilaksanakan; jika tidak, tindakan ganti (Y) harus diikuti. Walau bagaimanapun, coretan kod yang bertujuan untuk mencapai objektif ini secara konsisten mengembalikan True, membingungkan anda tentang ketepatannya.
Pelaku yang bertanggungjawab terhadap kelakuan salah ini ialah ketiadaan semakan syarat dalam pernyataan if. Pelaksanaan yang betul hendaklah seperti berikut:
if 'blabla' in line:
Walau bagaimanapun, jika fail teks anda agak besar, mungkin lebih cekap untuk membaca keseluruhan fail ke dalam rentetan dan melakukan carian menggunakan fail tersebut. Berikut ialah contoh:
with open('example.txt') as f: if 'blabla' in f.read(): print("true")
Untuk fail yang lebih besar, anda boleh memanfaatkan mmap.mmap() untuk mencipta objek "seperti rentetan" yang menggunakan fail asas dan bukannya memuatkan keseluruhan kandungan ke dalam memori.
import mmap with open('example.txt') as f: s = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ) if s.find('blabla') != -1: print('true')
Dalam Python 3, perlu diperhatikan bahawa mmaps menyerupai objek bytearray, yang memerlukan pengubahsuaian carian rentetan kepada objek bait:
import mmap with open('example.txt', 'rb', 0) as file, \ mmap.mmap(file.fileno(), 0, access=mmap.ACCESS_READ) as s: if s.find(b'blabla') != -1: print('true')
Selain itu, anda boleh menggunakan ungkapan biasa pada mmaps untuk keupayaan carian yang lebih maju, seperti padanan tidak peka huruf besar-kecil:
import mmap import re with open('example.txt', 'rb', 0) as file, \ mmap.mmap(file.fileno(), 0, access=mmap.ACCESS_READ) as s: if re.search(br'(?i)blabla', s): print('true')
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memeriksa Kehadiran Rentetan dengan Cekap dalam Fail Teks Besar dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!