Mencari Rentetan dalam Fail Teks
Isu:
Percubaan untuk menentukan sama ada rentetan tertentu wujud dalam fail teks yang menggunakan fungsi tertentu sentiasa mengembalikan True tanpa mengira rentetan kehadiran.
Kod:
def check(): datafile = file('example.txt') found = False for line in datafile: if blabla in line: found = True break
Diagnosis dan Penyelesaian:
Gelung kod yang disediakan melalui baris fail teks dan semak baris demi baris untuk mencari kehadiran rentetan tertentu, "blabla." Namun, isunya terletak pada syarat jika blabla selaras. Dalam Python, dalam semakan untuk keahlian, bermakna ia mengembalikan True jika rentetan berada di mana-mana dalam baris.
Untuk mengurangkan isu ini, pendekatan berbeza boleh dipertimbangkan:
Pilihan 1: Carian Rentetan Terus dalam Kandungan Fail
with open('example.txt') as f: if 'blabla' in f.read(): print("true")
Pendekatan ini membaca keseluruhan kandungan fail ke dalam rentetan dan kemudian menyemak kehadiran rentetan itu. Jika fail tidak terlalu besar, kaedah ini selalunya lebih pantas dan lebih mudah daripada mengulangi setiap baris.
Pilihan 2: Menggunakan Pemetaan Memori untuk Akses Fail yang Cekap
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')
Pendekatan ini menggunakan teknik pemetaan memori Python untuk mencipta objek "seperti rentetan" yang memanipulasi fail asas secara langsung, membolehkan akses yang cekap tanpa sepenuhnya memuatkan fail ke dalam ingatan.
Pilihan 3: Carian Tidak Peka huruf besar dengan Ungkapan Biasa
if re.search(br'(?i)blabla', s): print('true')
Pendekatan ini menggunakan ungkapan biasa untuk melakukan carian tidak sensitif huruf besar dalam fail yang dipetakan memori. Sintaks (?i)blabla menjadikan carian mengabaikan perbezaan kes.
Atas ialah kandungan terperinci Mengapa Carian Rentetan Python Saya dalam Fail Teks Sentiasa Kembali Benar?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!