簡體   English   中英

搜索文件並找到精確匹配和打印行?

[英]Search File And Find Exact Match And Print Line?

我四處搜索,但找不到任何帖子來幫助我解決這個問題,我發現了類似的問題,但無論如何我都找不到任何單獨解決此問題的方法。

這是我遇到的問題,我正在嘗試讓 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 

謝謝。

構建匹配行的列表 - 幾種風格:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM