web-dev-qa-db-ja.com

Python-テキストファイルから行番号を検索

テキストファイルを調べて、そこに入力があるかどうかを確認するコードを書いています。

例えば.

「ピザ」と入力します

私のテキストファイルに含まれるもの:

bread
pizza
pasta
tomato

Word pizzaがオンになっている行番号を印刷する方法を見つけたい。何か助けはありますか?

5
googlecoolcat
with open('test.txt') as f:
    content = f.readlines()

index = [x for x in range(len(content)) if 'pizza' in content[x].lower()]

コードのパート(1)は、各行を変数 "content"の個別のリストとして読み取ります。

パート(2)は、「ピザ」がその行に存在する場合にのみ、コンテンツの行番号を入力します。 [x for x in range(len(content))]は、すべてのインデックス値を入力するだけですが、 'if' pizza 'in content [x] .lower()'は、文字列に一致する行番号を保持します。

4
Oxymoron88

これを行うには2つの方法があります。

  1. ファイル全体をメモリに保存して、一度だけ読み取る
  2. すべての検索でファイルを読み取るが、保存する必要はない

方法1の場合、最初にすべての行を読み取ってから、Wordのインデックスを取得します。

with open('path.txt') as f: data = f.readlines()
line_no = data.index("pizza")

または、ファイルを調べてインデックスを見つけます。

with open('path.txt') as f:
    for line_no, line in enumerate(f):
        if line == "pizza":
            break
    else: # for loop ended => line not found
        line_no = -1
4
Rushy Panchal

このようなもの ?

import re
import os # You can go without is if you have other means to get your filepath

i = 1
matches = []
target = raw_input("Please type string to match\n")
with open(os.getenv("SOME_PATH") + "/myfile.txt") as fic: # open("myfile.txt") if in your current directory
     for line in fic:
         if re.search(target, line):
             print "Found at line {}".format(i)
             matches.append(i)
         i = i +1
if not len(matches):
    raise Exception, "target not found"

これを行うことで、正規表現を入力でき、正常に機能します(つまり、「p.zza」または「^ p。*」を入力すると、正常に機能します)。リストmatchesには、入力パターンと一致する行のすべてのインデックスが含まれます。

1
Valentin B.
print next (i for i,v in enumerate (open (fname),1) if v == needle)
0
Joran Beasley