1. ホーム
  2. python

[解決済み] startswith TypeError in function

2022-02-05 15:22:28

質問

以下はそのコードです。

    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 は、ドキュメントによると文字列のはずですが...どうなっているのでしょう?

LiClipseの最新バージョンを使っているので、少なくともPython 3を使用していると思います。

どのように解決するのですか?

それは、ファイルをバイトモードで開いているために bytes.startswith() であって str.startswith() .

を行う必要があります。 line.startswith(b'>') を作ることになります。 '>' a バイト・リテラル .