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
Lepaskan: 2024-12-22 02:14:21
asal
824 orang telah melayarinya

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
Salin selepas log masuk

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")
Salin selepas log masuk

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')
Salin selepas log masuk

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')
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan