У меня возникли проблемы с использованием next()
и strip()
, чтобы получить строку, следующую за той, которую я читаю. Данные теста выглядит примерно так:Получение следующей строки с использованием python next() и strip()
@abcde:111/2
ABCDEFGHIj
+abcde:111/2
bla11
@abcde:115/2
JDIJSKNDIJ
+abcde:115/2
bla13
@abcde:113/2
djijwkoken
+abcde:113/2
bla15
Моя цель состоит в том, чтобы удалить все наборы из 4-х строк, начиная с «@», которые содержат «N» во второй строке. Ожидаемый результат теста должен выглядеть следующим образом:
@abcde:111/2
ABCDEFGHIj
+abcde:111/2
bla11
@abcde:113/2
djijwkoken
+abcde:113/2
bla15
Вот мой код (delete_N.py), я бегу его с помощью Mac OS терминал на удаленном сервере Ubuntu, с Python 2.7:
import sys
filename1 = sys.argv[1] #file to process
data = open(filename1, 'r')
def del_N(input1):
for line in input1:
if line[:1] == '@' and 'N' not in next(input1).strip():
print line.strip()
for i in range(3):
print next(input1).strip()
del_N(data)
Но я получаю следующее сообщение об ошибке:
Traceback (most recent call last):
File "delete_N.py", line 14, in <module>
del_N(data)
File "delete_N.py", line 12, in del_N
print next(input1).strip()
StopIteration
Что я делаю неправильно?
Я обычно использую 'continue', где вы использовали' pass'. 'continue' будет работать независимо от того, как выглядит остальная часть цикла. В этом случае остальная часть цикла является 'else:' case, поэтому 'pass' работает. Во всяком случае, я согласен, что это путь, а не использование 'next()'. – steveha
@steveha Хорошая точка, 'continue' действительно стилистически лучше здесь. Починю. – senshin
@steveha Почему 'continue' лучше, чем' pass' или 'next()'? Я имею в виду, в каких ситуациях цикл не будет работать? – biohazard