我正在读取每行上带有不同字符串的文件。我希望能够在输入字符串中搜索与文件中的整行匹配的子字符串,然后保存该子字符串以便可以打印它。这就是我现在所拥有的:
wordsDoc = open('Database.doc', 'r', encoding='latin-1')
words = wordsDoc.read().lower()
matching = [string for string in words if string in op_text]
但这匹配每个角色。我该怎么做呢?
答案 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()]