2017-10-18 11 views
0

Je suis en train d'utiliser python pour lire un fichier texte et recherche une certaine chaîne dans le fichier comme ci-dessousListe tous les index dans une chaîne qui satisfait une certaine chaîne

with open("controlDict","r") as myfile: 
    file=myfile.read() 

IndexFirst=file.find('fields') 

Cependant, je trouve que seulement me donne le premier index de 'champs' dans le fichier mais j'ai besoin de trouver tous les index où 'fields' apparaît sur la ligne.

J'ai fait quelques recherches en ligne et essayé ci-dessous

Index=[i for i, val in enumerate(file) if val=='fields'] 

mais il ne fonctionne pas et retourne une liste vide.

Je ne sais pas pourquoi, quelqu'un a des suggestions?

+0

Voulez-vous une liste de index où les champs de mot apparaît? – BHawk

+0

Vous pourriez utiliser une regexp et 're.findall()' – Barmar

Répondre

1

Ouvrez le fichier, boucle sur chaque ligne et vérifier si elle contient des « champs » et si elle le fait, imprimer la ligne

with open("controlDict", "r") as myfile: 
    for line in myfile.readlines(): 
     if 'fields' in line: 
      print(line) 

Si vous avez juste besoin de l'index de la ligne que vous pouvez utiliser

with open("controlDict", "r") as myfile: 
    for index, line in enumerate(myfile.readlines()): 
     if 'fields' in line: 
      print(index) 
0

Si vous voulez l'index exact où les champs de mot se produit dans le fichier, vous pouvez effectuer les opérations suivantes:

str = "fields" 
indices = [] 
i = 0 
while i >= 0: 
    i = file.find(str,i) 
    indices.append(i) 

Si vous voulez l'index des lignes, vous pouvez utiliser la réponse d'AK47.

0

si vous voulez que les index des mots

def all_occurences(file, str): 
    initial = 0 
    while True: 
     initial = file.find(str, initial) 
     if initial == -1: return 
     yield initial 
     initial += len(str) 

print(list(all_occurences(open("controlDict.txt").read(), "fields"))) 

vous pouvez utiliser ce code

0

Le pourrait être utilisé la compréhension du module re et la liste:

import re 

with open('controlDict.txt', 'r') as myfile: 
    file = myfile.read() 

indices = [match.start() for match in re.finditer('fields', file)]