Python – как распознать EOL в файле FASTA

У меня есть скрипт Python, который должен читать файл FASTA посимвольно. Для этого я использовал c = f.read(1), где f — открытый файл. Мне нужно, чтобы он распознавал, когда он достигает конца строки, но '\n' и '\r', похоже, не работают. Я никогда раньше не работал с файлами этого типа, поэтому не уверен, что FASTA отличается. Кто-нибудь знает как это сделать? Спасибо!

Изменить: EOF != EOL. Я знаю, как найти конец файла.

Редактировать 2: Строка, которую я использую для поиска символа EOL, такова:

if c == '\n' or c == '\r':
    #operations to perform if found...

person thnkwthprtls    schedule 03.12.2013    source источник
comment
Просто интересно, зачем вы это делаете... вы же знаете о множестве парсеров FASTA и вспомогательных библиотек для подобных вещей, верно?   -  person Jon Clements♦    schedule 03.12.2013
comment
Да, но мне сказали придумать способ сделать это без каких-либо специально созданных парсеров, придумать самому   -  person thnkwthprtls    schedule 03.12.2013
comment
Вы открываете его в текстовом или двоичном режиме?   -  person user2357112 supports Monica    schedule 03.12.2013
comment
@user2357112 user2357112 На данный момент он открыт в двоичном формате, если есть способ сделать это в текстовом виде, я могу его изменить.   -  person thnkwthprtls    schedule 03.12.2013
comment
Я написал парсеры для FASTA на Python, и они отлично работали, используя стандартные символы конца строки. Возможно, вы могли бы опубликовать еще немного своего кода на случай, если проблема в другом месте?   -  person Peter de Rivaz    schedule 03.12.2013
comment
Согласно Wiki, EOL являются нормальными и продолжают строку с > до следующей >, чтобы вы могли просто читайте строки в обычном режиме... вам трудно определить конец последовательности?   -  person Jon Clements♦    schedule 03.12.2013
comment
@PeterdeRivaz Я добавлю строку, которую использую, к вопросу выше   -  person thnkwthprtls    schedule 03.12.2013
comment
Если вы открываете его в двоичном режиме, окончания строк могут состоять из двух символов, '\r\n'.   -  person user2357112 supports Monica    schedule 04.12.2013
comment
@user2357112 user2357112 Спасибо за совет, я только что попытался добавить это в оператор if выше, к сожалению, не повезло :( спасибо, хотя   -  person thnkwthprtls    schedule 04.12.2013
comment
@thnkwthprtls: Ну, конечно, нет, так как вы повторяете символ за символом. Попробуйте открыть файл в текстовом режиме, который преобразует новые строки в '\n'.   -  person user2357112 supports Monica    schedule 04.12.2013


Ответы (1)


Откройте файл в режиме универсального перевода строки:

with open('myfile.fasta', 'rU') as fp:
   ...

и сравните символ с '\n':

if c == '\n':
person Robᵩ    schedule 03.12.2013
comment
Я никогда не слышал об этом, но, кажется, это сработало. Спасибо! :) - person thnkwthprtls; 04.12.2013