以下是代码:
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。
答案 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'))即可。