需要创建一个带有两个参数的函数,一个要打开的文件名和一个模式。
该模式将是一个搜索字符串。
EG。该函数将打开具有“快速棕狐”(可能多于一行)之类的句子.txt
模式将是“棕色狐狸”
因此,如果找到,那么它应该返回一个行号和找到的字符串开头的字符的索引。否则,返回-1。
Catch是我以前从未在python中编程所以我不知道语法。 以前用C,C#,Java,VB等编码。
编辑:
filename = raw_input('输入文件名:')
pattern = raw_input('输入pattern:')
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)
答案 0 :(得分: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 :(得分:1)
这是一个非常简单的grep。你可以非常简单地使用正则表达式。 glob使用globbing并不会困难得多。此外,您想要的代码位于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))
请注意,我尚未测试此代码,因此可能存在轻微错误。如果它编译,它应该运行正常。
此外,您应该告诉您的老师,使用返回代码发送信号失败是一种可怕的方式。如果你要编写的函数的调用者需要知道是否找不到匹配项,那么它只能检查一个空列表。