在函数中以TypeError开头

时间:2013-11-07 03:42:29

标签: python python-3.x

以下是代码:

    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。

3 个答案:

答案 0 :(得分:43)

这是因为您以字节模式打开文件,因此您正在调用bytes.startswith()而不是str.startswith()

您需要执行line.startswith(b'>'),这会使'>'成为bytes literal

答案 1 :(得分:0)

没有让您的文件在'打开'

上尝试编码到utf-8进行测试
fp = open(filename, 'r', encoding='utf-8')

答案 2 :(得分:0)

如果仍然需要以二进制文件打开文件,则将'STR'替换为字节('STR'.encode('utf-8'))即可。