Heim >Backend-Entwicklung >Python-Tutorial >Wie kann ich in Python effizient prüfen, ob eine Zeichenfolge in großen Textdateien vorhanden ist?

Wie kann ich in Python effizient prüfen, ob eine Zeichenfolge in großen Textdateien vorhanden ist?

DDD
DDDOriginal
2024-12-12 12:45:11886Durchsuche

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

Textdateien auf String-Inklusivität prüfen

Stellen Sie sich ein Szenario vor, in dem Sie das Vorhandensein einer bestimmten Zeichenfolge in Textdateien feststellen möchten. Bei seiner Identifizierung sollte eine bestimmte Aktion (X) ausgeführt werden; Andernfalls sollte eine alternative Aktion (Y) folgen. Ein Codeausschnitt, der darauf abzielt, dieses Ziel zu erreichen, gibt jedoch immer „True“ zurück, was Sie über seine Genauigkeit rätselt.

Der Schuldige für dieses fehlerhafte Verhalten ist das Fehlen einer Bedingungsprüfung innerhalb der if-Anweisung. Die richtige Implementierung sollte wie folgt aussehen:

if 'blabla' in line:

Wenn Ihre Textdateien jedoch relativ groß sind, kann es effizienter sein, die gesamte Datei in einen String einzulesen und die Suche damit durchzuführen. Hier ist ein Beispiel:

with open('example.txt') as f:
    if 'blabla' in f.read():
        print("true")

Für noch größere Dateien können Sie mmap.mmap() nutzen, um ein „stringähnliches“ Objekt zu erstellen, das die zugrunde liegende Datei verwendet, anstatt den gesamten Inhalt in den Speicher zu laden.

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')

In Python 3 ist zu beachten, dass mmaps Bytearray-Objekten ähneln, was eine Änderung der Suchzeichenfolge in Bytes erfordert Objekt:

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')

Darüber hinaus können Sie reguläre Ausdrücke auf mmaps für erweiterte Suchfunktionen verwenden, wie z. B. den Abgleich ohne Berücksichtigung der Groß-/Kleinschreibung:

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')

Das obige ist der detaillierte Inhalt vonWie kann ich in Python effizient prüfen, ob eine Zeichenfolge in großen Textdateien vorhanden ist?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn