テキストファイルを調べて、そこに入力があるかどうかを確認するコードを書いています。
例えば.
「ピザ」と入力します
私のテキストファイルに含まれるもの:
bread
pizza
pasta
tomato
Word pizzaがオンになっている行番号を印刷する方法を見つけたい。何か助けはありますか?
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()'は、文字列に一致する行番号を保持します。
これを行うには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
このようなもの ?
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
には、入力パターンと一致する行のすべてのインデックスが含まれます。
print next (i for i,v in enumerate (open (fname),1) if v == needle)