[英]Search File And Find Exact Match And Print Line?
我四處搜索,但找不到任何帖子來幫助我解決這個問題,我發現了類似的問題,但無論如何我都找不到任何單獨解決此問題的方法。
這是我遇到的問題,我正在嘗試讓 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
謝謝。
構建匹配行的列表 - 幾種風格:
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生成)是您的朋友,尤其是對於不適合內存的大文件。
要檢查完全匹配,您可以使用num == line
。 但是line
有一個行尾字符\\n
或\\r\\n
,它不會在num
因為raw_input
了尾隨的換行符。 所以刪除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 )
你應該使用正則表達式來找到你需要的一切:
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']
所以你不匹配 '200' 或 '220' 為 '20'。
這很容易:
numb = raw_input('Input Line: ')
fiIn = open('file.txt').readlines()
for lines in fiIn:
if numb == lines[0]:
print lines
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
支票必須是這樣的:
if num == line.split()[0]:
如果 file.txt 有這樣的布局:
1 foo
20 bar
30 20
我們將"1 foo"
拆分為['1', 'foo']
並僅使用第一項,即數字。
例如,如果您想顯示其中包含單詞“password”的行,
import re;
fpointer = open("access.log", "r");
for i in fpointer.readlines():
line= re.findall(r'password', i);
if line:
print(i);
fpointer.close();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.