2013-03-30 150 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 

發電機(由產率爲)是你的朋友,特別是那些不大文件適應記憶。