Поиск файла: TypeError - PullRequest
       1

Поиск файла: TypeError

1 голос
/ 20 декабря 2009

Я пытаюсь найти файл, в котором строка, содержащая поисковый термин, найдена и напечатана вместе с количеством строк до и после поискового термина, определенного пользователем. У меня есть кодировка:

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()

Но я получаю ошибку TypeError в d [% numb] = line.rstrip () Неподдерживаемые типы операндов для%: 'int' и 'str'

Помогли бы, спасибо

Ответы [ 2 ]

1 голос
/ 20 декабря 2009

Вы не указали, что такое numb, но я предполагаю, что это что-то вроде:

numb = sys.argv[1]

sys.argv - это массив строк, а не целых чисел. Попробуйте преобразовать строку в целое число:

numb = int(sys.argv[1])
0 голосов
/ 20 декабря 2009

n% онемения может иметь различные значения, в зависимости от типа n и онемения. Если они оба числа, это означает «возьми модуль», который, как я полагаю, и есть то, что ты намереваешься. Если n - это строка, то это означает, что выполняется форматирование%. Если n - это число, а numb - это строка, Python не знает, что делать, и вызывает ошибку TypeError. Вы смотрели на сообщение об ошибке в исключении? В нем должно быть указано «неподдерживаемые типы операндов для%: 'int' и 'str'", что скажет вам все, что вам нужно знать.

Как только вы это исправите, я не думаю, что ваша программа будет делать то, что вы хотите - есть несколько проблем с этим. 1) если ваш поисковый термин находится в первых оцепенелых строках, вы получите исключение при попытке прочитать строки из словаря, которые еще не были вставлены.

2) последний цикл в вашем коде читает следующие оцепенелые строки, но не выполняет их поиск, поэтому пропущены все вхождения поискового запроса.

3) Использование модуля для поддержки буфера строк - это разумно, но есть лучший способ. Посмотрите на класс collection.deque ,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...