【发布时间】:2011-06-14 16:32:32
【问题描述】:
如何在文本文件中搜索关键短语或关键字,然后打印关键短语或关键字所在的行?
【问题讨论】:
如何在文本文件中搜索关键短语或关键字,然后打印关键短语或关键字所在的行?
【问题讨论】:
searchfile = open("file.txt", "r")
for line in searchfile:
if "searchphrase" in line: print line
searchfile.close()
打印多行(以简单的方式)
f = open("file.txt", "r")
searchlines = f.readlines()
f.close()
for i, line in enumerate(searchlines):
if "searchphrase" in line:
for l in searchlines[i:i+3]: print l,
print
print l, 中的逗号可防止输出中出现多余的空格;尾随的 print 语句区分不同行的结果。
或者更好(从 Mark Ransom 那里偷回来):
with open("file.txt", "r") as f:
searchlines = f.readlines()
for i, line in enumerate(searchlines):
if "searchphrase" in line:
for l in searchlines[i:i+3]: print l,
print
【讨论】:
readlines 更有效?
with open('file.txt', 'r') as searchfile:
for line in searchfile:
if 'searchphrase' in line:
print line
向我公然抄袭的senderle 道歉。
【讨论】:
with 语句是 Python 的一个相当新的补充,使你的答案最适合某些人。你很久以前就收到了我的 +1!
注意“i+3”可能会出现超出范围的索引。你可以这样做:
with open("file.txt", "r") as f:
searchlines = f.readlines()
j=len(searchlines)-1
for i, line in enumerate(searchlines):
if "searchphrase" in line:
k=min(i+3,j)
for l in searchlines[i:k]: print l,
print
编辑:也许没有必要。我只是测试了一些例子。如果 y 超出范围,x[y] 会报错,但 x[y:z] 似乎不会因为 y 和 z 的值超出范围而报错。
【讨论】:
i 处的确切项目”。如果i 没有项目,那么返回一些东西——甚至是None——都是谎言,所以最好抛出一个异常。