Rumah >pembangunan bahagian belakang >Tutorial Python >Mengapa Carian Rentetan Python Saya dalam Fail Teks Sentiasa Kembali Benar?

Mengapa Carian Rentetan Python Saya dalam Fail Teks Sentiasa Kembali Benar?

Susan Sarandon
Susan Sarandonasal
2024-12-22 02:14:21889semak imbas

Why Does My Python String Search in a Text File Always Return True?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn