我四处搜索,但我找不到任何帖子来帮助我解决这个问题,我发现了类似但我无论如何也找不到任何解决这个问题的事情。
这是我遇到的问题,我正在尝试让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
感谢。
答案 0 :(得分:9)
要检查完全匹配,您可以使用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 )
答案 1 :(得分:3)
建立匹配行的列表 - 几种口味:
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 生成)是你的朋友,特别是对于不适合内存的大文件。
答案 2 :(得分:2)
你应该使用正则表达式找到你需要的所有东西:
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”。
答案 3 :(得分:1)
这很容易:
numb = raw_input('Input Line: ')
fiIn = open('file.txt').readlines()
for lines in fiIn:
if numb == lines[0]:
print lines
答案 4 :(得分:0)
支票必须是这样的:
if num == line.split()[0]:
如果file.txt的布局如下:
1 foo
20 bar
30 20
我们将"1 foo"
拆分为['1', 'foo']
,然后使用第一项,即数字。
答案 5 :(得分:0)
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
答案 6 :(得分:-1)
例如,如果您想显示包含单词“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();