2011-03-08 2 views
4

Je souhaite rechercher et faire correspondre un mot particulier dans un fichier texte.Comment faire correspondre un mot dans un fichier texte en utilisant python?

with open('wordlist.txt', 'r') as searchfile: 
     for line in searchfile: 
      if word in line: 
        print line 

Ce code renvoie même les mots qui contiennent des sous-chaînes du mot cible. Par exemple si le mot est "là" alors la recherche retourne "là", "donc", "ainsi", etc.

Je veux que le code retourne seulement les lignes qui contiennent "là". Période.

Répondre

5

diviser la ligne en jetons: if word in line.split():

+0

Probablement la solution la plus performante par rapport à la regex, mais elle pourrait casser dans les cas de coin (je ne peux pas dire avec certitude parce que je ne sais pas à quoi ressemble l'entrée). +1 pour la simplicité. –

+0

Hey merci @jcomeau_ictx. Cela a fonctionné :) – Apps

+0

vous êtes les bienvenus. mais comme les autres l'ont dit, apprenez les expressions régulières. ça prend du temps, mais ça vaut le coup. * pydoc re * –

5
import re 

file = open('wordlist.txt', 'r') 

for line in file.readlines(): 
    if re.search('^there$', line, re.I): 
     print line 

La fonction re.search balaye la chaîne line et renvoie vrai si elle constate l'expression régulière définie dans le premier paramètre, en ignorant cas avec re.I. Le caractère ^ signifie «début de ligne» tandis que le caractère $ signifie «fin de ligne». Par conséquent, la fonction de recherche ne retournera vrai que si elle correspond il précédé par le début de la ligne, et suivie par la fin de la ligne, alias isolé sur son propre.

+0

Une explication du code serait bien, car il est clair que l'OP n'est pas familier avec le concept regex. – Velociraptors

+0

cela n'aurait-il pas le même problème? peut-être que^^ * * * serait mieux? – schwiz

+0

Il est difficile de faire correspondre tous les cas de coin sans aucune indication de ce à quoi ressemble l'entrée. '\ bthere \ b' pourrait être meilleur que'^there $ '. – Velociraptors

0

Rechercher le module re (expressions régulières). re.search avec l'expression rationnelle 'là' est ce que vous voulez.

1

Vous pouvez toujours utiliser regex, quelque chose le long des lignes de:

import re 

with open('wordlist.txt', 'r') as searchfile: 
     for line in searchfile: 
      if re.search(r'\sthere\s', line, re.M|re.I): 
        print line 
  • \sthere\s - un espace suivi par 'là' suivi d'un espace
  • re.I - signifie insensible à la casse
  • re.M - n'a pas vraiment dans ce cas (puisque les lignes ont seulement 1 \ n)
+0

Quelque chose comme r '\ bthere \ b' serait mieux. '\ b' correspond à une limite de mot sans consommer de caractères comme' \ s'. – whjou

Questions connexes