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
Libérer: 2024-12-12 12:45:11
original
877 Les gens l'ont consulté

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:
Copier après la connexion

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")
Copier après la connexion

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')
Copier après la connexion

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')
Copier après la connexion

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')
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal