Python:读取文件并查找目标文本
需要创建一个函数,这个函数有两个参数,一个是要打开的文件名,另一个是要搜索的模式。
这个模式就是你要查找的字符串。
比如,这个函数会打开一个名为 sentence.txt 的文件,里面可能有类似 "The quick brown fox" 这样的内容(可能不止一行)。
而你要查找的模式是 "brown fox"。
如果找到了这个字符串,函数应该返回它所在的行号和这个字符串开始的字符位置。如果没找到,就返回 -1。
问题是,我之前从来没有用过 Python 编程,所以我不太懂它的语法。
我之前用过 C、C#、Java、VB 等语言。
编辑:
.....Id
.....Name
#我希望你能写出 HW3 的代码,使用迭代或者
嵌套迭代,明确地将字符
字符串作为数组进行索引;也就是说,Python 的 index(),也就是
string.index() 函数在这个作业中是不允许使用的。
#filename = raw_input('输入文件名: ')
pattern = raw_input('输入模式: ')
def findPattern(fname, pat):
一次性读取整个文件
filetext = open(fname).read()
if pat in filetext:
print("Found it -- chunk")
else:
print("Nothing -- chunk")
逐行读取文件
for search in open(fname):
if pat in search:
print("Found it -- line")
else:
print("Nothing -- line")
findPattern(filename, pattern)
2 个回答
3
你可以用“in”这个操作符来模拟简单的“grep”功能。
def grep(filename, pattern):
for n,line in enumerate(open(filename)):
if pattern in line:
print line, n
如果你想找到某个字符在字符串中的位置,可以使用 str.index()
或者 str.find()
。
1
这里有一个非常简单的grep(文本搜索工具)。你可以很容易地改进它,让它支持正则表达式。使用glob来处理文件名匹配也不会太难。而且,你需要的代码在grep
和main
之间分散着,所以这可能比自定义的grep更有趣;)
def grep(filename, needle):
with open(filename) as f_in:
matches = ((i, line.find(needle), line) for i, line in enumerate(f_in))
return [match for match in matches if match[0] != -1]
def main(filename, needle):
matches = grep(filename, needle)
if matches:
print "{0} found on {1} lines in {2}".format(needle, len(matches), filename)
for line in matches:
print "{0}:{1}:{2}".format(*line)
return 1
else:
return -1
if __name__=='__main__':
import sys
filename = sys.argv[1]
needle = sys.argv[2]
return sys.exit(main(filename, needle))
请注意,我没有测试过这段代码,所以可能会有一些小错误。不过如果它能编译通过,运行应该没问题。
另外,你应该告诉你的老师,使用返回码来表示失败是一种糟糕的做法。如果调用你要写的函数的人需要知道是否没有找到匹配项,他们可以直接检查返回的列表是否为空。