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!