Python:读取文件并查找目标文本

1 投票
2 回答
13276 浏览
提问于 2025-04-16 04:40

需要创建一个函数,这个函数有两个参数,一个是要打开的文件名,另一个是要搜索的模式。

这个模式就是你要查找的字符串。

比如,这个函数会打开一个名为 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来处理文件名匹配也不会太难。而且,你需要的代码在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))

请注意,我没有测试过这段代码,所以可能会有一些小错误。不过如果它能编译通过,运行应该没问题。

另外,你应该告诉你的老师,使用返回码来表示失败是一种糟糕的做法。如果调用你要写的函数的人需要知道是否没有找到匹配项,他们可以直接检查返回的列表是否为空。

撰写回答