我试图搜索一个文件,其中找到包含搜索词的行,并在用户定义的搜索词之前和之后打印多行。我到目前为止的编码是:
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'
的不支持的操作数类型帮助非常棒,谢谢
答案 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类,