Maison >développement back-end >Tutoriel Python >Comment puis-je vérifier efficacement la présence d'une chaîne dans des fichiers texte volumineux en Python ?

Comment puis-je vérifier efficacement la présence d'une chaîne dans des fichiers texte volumineux en Python ?

DDD
DDDoriginal
2024-12-12 12:45:11886parcourir

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

Inspection des fichiers texte pour l'inclusivité des chaînes

Considérez un scénario dans lequel vous cherchez à vérifier la présence d'une chaîne spécifique dans des fichiers texte. Lors de son identification, une action spécifique (X) doit être exécutée ; sinon, une action alternative (Y) devrait suivre. Cependant, un extrait de code qui vise à atteindre cet objectif renvoie systématiquement True, ce qui vous laisse perplexe quant à son exactitude.

Le coupable responsable de ce comportement erroné est l'absence de vérification de condition dans l'instruction if. L'implémentation appropriée devrait être la suivante :

if 'blabla' in line:

Cependant, si vos fichiers texte sont relativement volumineux, il peut être plus efficace de lire l'intégralité du fichier dans une chaîne et d'effectuer la recherche en utilisant celle-ci. Voici un exemple :

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

Pour des fichiers encore plus volumineux, vous pouvez utiliser mmap.mmap() pour créer un objet « de type chaîne » qui utilise le fichier sous-jacent au lieu de charger l'intégralité du contenu en mémoire.

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

Dans Python 3, il convient de noter que les mmaps ressemblent à des objets bytearray, nécessitant la modification de la chaîne de recherche en octets object :

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

De plus, vous pouvez utiliser des expressions régulières sur mmaps pour des capacités de recherche plus avancées, telles que la correspondance insensible à la casse :

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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn