文件搜索:TypeError

时间:2009-12-20 10:23:40

标签: python

我试图搜索一个文件,其中找到包含搜索词的行,并在用户定义的搜索词之前和之后打印多行。我到目前为止的编码是:

f = open(f, 'r')
d = {}
for n, line in enumerate(f):
    d[n%numb] = line.rstrip()
    if search_term in line:
        for i in rang(n+1,n+1+numb):
            print d[i%numb]
        for i in range(1, numb):
            print f.next().rstrip()

但我在d [%numb] = line.rstrip()时得到一个TypeError %:'int'和'str'

的不支持的操作数类型

帮助非常棒,谢谢

2 个答案:

答案 0 :(得分:1)

您尚未指定numb是什么,但我猜它是这样的:

numb = sys.argv[1]

sys.argv是一个字符串数组,而不是整数。尝试将字符串转换为整数:

numb = int(sys.argv[1])

答案 1 :(得分:0)

n%numb可能有不同的含义,具体取决于n和numb的类型。如果它们都是数字,则意味着“取模数”,我认为这是你想要的。如果n是一个字符串,则表示执行%格式化。如果n是数字而numb是一个字符串,Python不知道该怎么做并引发TypeError。您是否查看了异常上的错误消息?应该说“不支持的操作数类型为%:'int'和'str'”,它会告诉你需要知道的一切。

一旦你解决了这个问题,我认为你的程序不会做你想做的事 - 它有几个问题。 1)如果您的搜索词位于第一个麻木行中,那么您将尝试从字典中读取尚未插入的行。

2)代码中的最后一个循环读取下一个麻木行,但不搜索它们,因此将丢失任何出现的搜索词。

3)使用模数来保持线条的缓冲是很聪明的,但有一种更好的方法。查看collections.deque类,