Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Saya Boleh Memeriksa Kehadiran Rentetan dengan Cekap dalam Fail Teks Besar dalam Python?

Bagaimanakah Saya Boleh Memeriksa Kehadiran Rentetan dengan Cekap dalam Fail Teks Besar dalam Python?

DDD
DDDasal
2024-12-12 12:45:11967semak imbas

How Can I Efficiently Check for a String's Presence in Large Text Files in Python?

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!

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