2013-03-30 65 views
3

我搜索了周围,但我找不到任何帖子来帮助我解决这个问题,我发现类似,但我无法找到任何解决这个问题的东西。搜索文件并查找完全匹配并打印行?

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

示例,用户类型20则输出是包含20每一件事情,所以我得到220 foo200 bar等我怎样才能解决这个问题,因此只要找到“20”

这里我的代码

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

谢谢。

+0

这在某种程度上取决于file.txt中的文本的样子。你能给我们一些例子吗? – naeg

+0

对不起文本文件看起来像这样 1等等 2等等 3等等 4等等 5等等 下去的列表,从而有文本的每行前的数字。 – Robots

回答

6

要检查确切的匹配,您可以使用num == line。但line具有端的行的字符\n\r\n这将不会在num因为raw_input去除结尾的换行符。因此,它可以方便地与

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) 
+0

jfyi,'raw_input()'自动去除空格 – lenik

+0

@lenik:感谢您的更正。 – unutbu

+0

小心:raw_input()不去掉尾随空白,它会去掉尾随的换行符。 – DSM

0

支票移除所有的空格在line末必须是这样的:

if num == line.split()[0]: 

如果file.txt的有布局像这样:

1 foo 
20 bar 
30 20 

We spli将"1 foo"转换为['1', 'foo'],并只使用第一项,即数字。

1

这很容易:

numb = raw_input('Input Line: ') 
fiIn = open('file.txt').readlines() 
for lines in fiIn: 
    if numb == lines[0]: 
     print lines 
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'] 

所以你不匹配'200'或'220'为'20'。

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 
+0

这似乎仍然打印我的.txt文件中包含任何来自Raw_input的数字,任何建议? – Robots

0

匹配线的构建列表 - 几种口味:匹配线

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 

发电机(由产率为)是你的朋友,特别是那些不大文件适应记忆。