在python中搜索文件中的字符串

时间:2014-01-05 04:56:06

标签: python string

我正在读取每行上带有不同字符串的文件。我希望能够在输入字符串中搜索与文件中的整行匹配的子字符串,然后保存该子字符串以便可以打印它。这就是我现在所拥有的:

wordsDoc = open('Database.doc', 'r', encoding='latin-1')
words = wordsDoc.read().lower()
matching = [string for string in words if string in op_text]

但这匹配每个角色。我该怎么做呢?

3 个答案:

答案 0 :(得分:1)

几点意见:

首先,使用with打开文件通常会更好:

with open('Database.doc', 'r', encoding='latin-1') as f:
    # closes the file automagically at the end of this block...

其次,除非您对整个文件执行某些操作,否则无需读取整个文件。由于您正在搜索线条,因此逐一处理这些线条:

matches=[]
with open('Database.doc', 'r', encoding='latin-1') as f:
    for line in f:
        if string in line.lower():
             matches.append(line)

如果您尝试匹配整个行:

matches=[]
with open('Database.doc', 'r', encoding='latin-1') as f:
    for line in f:
        if string == line.lower():
             matches.append(line)

或者,更奇怪的是,使用列表理解:

with open('Database.doc', 'r', encoding='latin-1') as f:
    matches=[line for line in f if line.lower()==string]

等...

答案 1 :(得分:1)

这将创建一个名为“matching”的列表,其中包含文件中与op_text中的字符串完全匹配的所有行,一旦小写。

with open('Database.doc', 'r', encoding='latin-1') as wordsDoc:
    matching = [line for line in wordsDoc if op_text == line.lower()]

答案 2 :(得分:1)

我认为这个想法是有一些搜索短语,如果它包含在文件的任何行中,你想要过滤掉这些行。

试试这个,它会比较该行的较低版本,但如果它包含search_key,则会从文件中返回原始行。

with open('somefile.doc') as f:
   matching = [line for line in f if search_key in line.lower()]