Maison >développement back-end >Tutoriel Python >Comment puis-je vérifier de manière fiable la présence d'une chaîne dans un fichier texte en Python ?
Recherche de chaînes dans des fichiers texte
Vous cherchez à vérifier la présence d'une chaîne spécifique dans un fichier texte et à exécuter différentes actions en fonction du résultat. Cependant, malgré vos efforts, votre code renvoie systématiquement True, vous laissant perplexe. Ce guide vous aidera à identifier le problème et à proposer des approches alternatives pour atteindre votre objectif.
Le code d'origine que vous avez présenté présentait un défaut crucial : il n'a pas réussi à fermer l'objet fichier, ce qui pourrait entraîner des comportements inattendus. En ajoutant un bloc try/finally avec une fermeture de fichier appropriée, le code devient fiable :
def check(): try: datafile = open('example.txt') found = False for line in datafile: if 'blabla' in line: found = True break finally: datafile.close() check() if found: print("true") else: print("false")
Envisagez d'utiliser l'instruction with pour un moyen concis et sûr d'ouvrir et de fermer des fichiers, car elle gère automatiquement la fermeture des fichiers :
with open('example.txt') as datafile: found = False for line in datafile: if 'blabla' in line: found = True break if found: print("true") else: print("false")
Si votre fichier texte est de taille moyenne, vous pouvez utiliser une autre approche en lisant l'intégralité du fichier dans une chaîne. Cette méthode est souvent plus rapide et plus simple que de parcourir chaque ligne :
with open('example.txt') as f: if 'blabla' in f.read(): print("true")
Pour les fichiers texte volumineux, vous pouvez utiliser mmap.mmap() pour créer une carte mémoire sauvegardée sur un fichier, évitant ainsi d'avoir à charger le fichier entier 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')
N'oubliez pas que si vous utilisez mmap avec Python 3, traitez la sous-séquence de find() comme un objet octets (par exemple, b'blabla') pour correspondre au comportement des mmaps dans l'interpréteur Python.
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!