私は周りを検索しましたが、この問題を解決するのに役立つ投稿を見つけることができませんでした、私は同様のことがわかりましたが、とにかくこれだけに対処するものは見つかりませんでした。
ここに私が持っている問題があります、私はpythonスクリプトがテキストファイルを検索しようとしている、テキストファイルはリストに番号があり、すべての番号はテキストの行に対応raw_inputは、そのテキスト行全体を印刷するテキストファイル内の正確な番号に一致しますが、これまでは番号を含むすべての行を印刷します。
問題の例、ユーザーが20
と入力すると、出力は2
と0
を含むすべてのものになるため、220 foo
200 bar
などを取得できます。これを修正して「20」を見つけます
ここに私が持っているコードがあります
num = raw_input ("Type Number : ")
search = open("file.txt")
for line in search:
if num in line:
print line
ありがとう。
exactの一致を確認するには、num == line
を使用します。ただし、line
には行末文字\n
または\r\n
があり、raw_input
は末尾の改行を削除するため、num
には含まれません。したがって、line
の最後にあるすべての空白を削除すると便利です
line = line.rstrip()
with open("file.txt") as search:
for line in search:
line = line.rstrip() # remove '\n' at end of line
if num == line:
print(line )
一致した行のリストを作成-いくつかのフレーバー:
def lines_that_equal(line_to_match, fp):
return [line for line in fp if line == line_to_match]
def lines_that_contain(string, fp):
return [line for line in fp if string in line]
def lines_that_start_with(string, fp):
return [line for line in fp if line.startswith(string)]
def lines_that_end_with(string, fp):
return [line for line in fp if line.endswith(string)]
一致した行のジェネレーターを構築する(メモリ効率):
def generate_lines_that_equal(string, fp):
for line in fp:
if line == string:
yield line
一致するすべての行を印刷します(最初にすべての一致を見つけてから印刷します):
with open("file.txt", "r") as fp:
for line in lines_that_equal("my_string", fp):
print line
一致するすべての行を印刷します(見つかったとおりに遅延印刷します)
with open("file.txt", "r") as fp:
for line in generate_lines_that_equal("my_string", fp):
print line
ジェネレーター(yieldによって生成されます)は、特にメモリに収まらない大きなファイルの場合の友達です。
必要なものすべてを見つけるには、正規表現を使用する必要があります。
import re
p = re.compile(r'(\d+)') # a pattern for a number
for line in file :
if num in p.findall(line) :
print line
正規表現は、たとえば次のように、行内のすべての数値をリストとして返します。
>>> re.compile(r'(\d+)').findall('123kh234hi56h9234hj29kjh290')
['123', '234', '56', '9234', '29', '290']
そのため、「20」に対して「200」または「220」は一致しません。
それは非常に簡単です:
numb = raw_input('Input Line: ')
fiIn = open('file.txt').readlines()
for lines in fiIn:
if numb == lines[0]:
print lines
チェックは次のようにする必要があります。
if num == line.split()[0]:
File.txtに次のようなレイアウトがある場合:
1 foo
20 bar
30 20
"1 foo"
into ['1', 'foo']
そして最初の項目、つまり数字を使用します。
num = raw_input ("Type Number : ")
search = open("file.txt","r")
for line in search.readlines():
for digit in num:
# Check if any of the digits provided by the user are in the line.
if digit in line:
print line
continue