Подтвердить что ты не робот

Startswith TypeError в функции

Вот код:

    def readFasta(filename):
        """ Reads a sequence in Fasta format """
        fp = open(filename, 'rb')
        header = ""
        seq = ""
        while True:
            line = fp.readline()
            if (line == ""):
                break
            if (line.startswith('>')):
                header = line[1:].strip()
            else:
                seq = fp.read().replace('\n','')
                seq = seq.replace('\r','')          # for windows
                break
        fp.close()
        return (header, seq)

    FASTAsequence = readFasta("MusChr01.fa")

Ошибка, которую я получаю:

TypeError: startswith first arg must be bytes or a tuple of bytes, not str

Но первый аргумент startswith должен быть строкой в ​​соответствии с документами... так что происходит?

Я предполагаю, что использую хотя бы Python 3, так как использую последнюю версию LiClipse.

4b9b3361

Ответ 1

Это потому, что вы открываете файл в режиме байтов, и поэтому вы вызываете bytes.startswith(), а не str.startswith().

Вам нужно сделать line.startswith(b'>'), который сделает '>' a байты буква.

Ответ 2

Без проверки вашего файла на try encoding на utf-8 на 'open'

fp = open(filename, 'r', encoding='utf-8')

Ответ 3

Если осталось открыть файл в двоичном формате, замена 'STR' на байты ('STR'.encode(' utf-8 ')) работает для меня.