搜索文件并找到完全匹配和打印行?

时间:2013-03-30 11:34:49

标签: python file search match

我四处搜索,但我找不到任何帖子来帮助我解决这个问题,我发现了类似但我无论如何也找不到任何解决这个问题的事情。

这是我遇到的问题,我正在尝试让python脚本搜索文本文件,文本文件在列表中包含数字,每个数字对应一行文本,如果raw_input匹配的是确切的数字它打印整行文本的文本文件。到目前为止它打印包含该数字的任何行。

问题的示例,用户类型20然后输出是包含20的所有内容,因此我得到220 foo 200 bar等我如何解决这个问题,以便找到“20”

这是我的代码

num = raw_input ("Type Number : ")
search = open("file.txt")
for line in search:
 if num in line:
  print line 

感谢。

7 个答案:

答案 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();