蟒蛇;阅读文件并找到所需的文字

时间:2010-09-28 02:57:06

标签: python file search

需要创建一个带有两个参数的函数,一个要打开的文件名和一个模式。

该模式将是一个搜索字符串。

EG。该函数将打开具有“快速棕狐”(可能多于一行)之类的句子.txt

模式将是“棕色狐狸”

因此,如果找到,那么它应该返回一个行号和找到的字符串开头的字符的索引。否则,返回-1。

Catch是我以前从未在python中编程所以我不知道语法。 以前用C,C#,Java,VB等编码。

编辑:

.....编号

.....名称

我的意图是你把HW3代码写成迭代或

显式索引字符

的嵌套迭代

字符串作为数组;即,Python索引()也称为

这个作业不允许使用string.index()函数。

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)

2 个答案:

答案 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并不会困难得多。此外,您想要的代码位于grepmain之间,因此可能比自定义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))

请注意,我尚未测试此代码,因此可能存在轻微错误。如果它编译,它应该运行正常。

此外,您应该告诉您的老师,使用返回代码发送信号失败是一种可怕的方式。如果你要编写的函数的调用者需要知道是否找不到匹配项,那么它只能检查一个空列表。