Je dois obtenir le numéro de ligne d'une phrase dans un fichier texte. La phrase pourrait être:
the dog barked
Je dois ouvrir le fichier, rechercher cette phrase et imprimer le numéro de ligne.
J'utilise Python 2.6 sur Windows XP
C'est ce que j'ai:
o = open("C:/file.txt")
j = o.read()
if "the dog barked" in j:
print "Found It"
else:
print "Couldn't Find It"
Ce ne sont pas des devoirs, cela fait partie d'un projet sur lequel je travaille. Je ne sais même pas comment obtenir le numéro de ligne.
lookup = 'the dog barked'
with open(filename) as myFile:
for num, line in enumerate(myFile, 1):
if lookup in line:
print 'found at line:', num
f = open('some_file.txt','r')
line_num = 0
search_phrase = "the dog barked"
for line in f.readlines():
line_num += 1
if line.find(search_phrase) >= 0:
print line_num
EDIT 1.5 ans plus tard (après l'avoir vu, nous avons un autre vote positif): Je laisse ceci tel quel; mais si j'écrivais aujourd'hui, j'écrirais quelque chose de plus proche de la solution de Ash/suzanshakya:
def line_num_for_phrase_in_file(phrase='the dog barked', filename='file.txt')
with open(filename,'r') as f:
for (i, line) in enumerate(f):
if phrase in line:
return i
return -1
with
pour ouvrir des fichiers correspond à l’idiome Pythonic - cela garantit que le fichier sera correctement fermé lorsque le bloc qui utilise le fichier se termine. for line in f
est beaucoup mieux que for line in f.readlines()
. Le premier est Pythonic (par exemple, fonctionnerait si f
est un itératif générique; ce n'est pas nécessairement un objet fichier qui implémente readlines
) et si plus efficace f.readlines()
crée une liste avec le fichier entier en mémoire, puis itère à travers celui-ci. * if search_phrase in line
est plus Pythonic que if line.find(search_phrase) >= 0
, car il ne nécessite pas line
pour implémenter find
, lit plus facilement pour voir ce qui est prévu, et n'est pas facilement foiré (par exemple, if line.find(search_phrase)
et if line.find(search_phrase) > 0
ne fonctionneront pas dans tous les cas car find find l'index de la première correspondance ou -1). enumerate
comme for i, line in enumerate(f)
plutôt que d’initialiser line_num = 0
avant la boucle, puis de l’incrémenter manuellement dans la boucle. (Bien que ce soit discutable, il est plus difficile à lire pour les personnes inconnues de enumerate
.) def get_line_number(phrase, file_name):
with open(file_name) as f:
for i, line in enumerate(f, 1):
if phrase in line:
return i
suzanshakya , je suis en train de modifier votre code. Je pense que cela simplifiera le code, mais assurez-vous qu'avant d'exécuter le code, le fichier doit se trouver dans le même répertoire de la console, sinon l'erreur entraînera une erreur.
lookup="The_String_You're_Searching"
file_name = open("file.txt")
for num, line in enumerate(file_name,1):
if lookup in line:
print(num)
list = open("file_name","mode")
if "search element" in list:
print list.index("search element") # This will gives you the line number
Ouvrez votre fichier, puis faites quelque chose comme ...
for line in f:
nlines += 1
if (line.find(phrase) >= 0):
print "Its here.", nlines
Il existe de nombreuses façons de lire des lignes dans des fichiers en Python, mais la technique for line in f
est plus efficace que la plupart.
for n,line in enumerate(open("file")):
if "pattern" in line: print n+1
Voici ce que j'ai trouvé au travail:
f_rd = open(path, 'r')
file_lines = f_rd.readlines()
f_rd.close()
matches = [line for line in file_lines if "chars of Interest" in line]
index = file_lines.index(matches[0])