Я поздно конвертирую в Python 3. Я пытаюсь обработать вывод из API REST для последовательностей белков, используя urllib.
В устаревшем питоне я мог бы использовать:
self.seq_fileobj = urllib2.urlopen("http://www.uniprot.org/uniprot/{}.fasta".format(uniprot_id))
self.seq_header = self.seq_fileobj.next()
print "Read in sequence information for {}.".format(self.seq_header[:-1])
self.sequence = [achar for a_line in self.seq_fileobj for achar in a_line if achar != "\n"]
print("Sequence:{}\n".format("".join(self.sequence)))
Длятот же фрагмент кода в Python 3, который я использую:
context = ssl._create_unverified_context()
self.seq_fileobj = urllib.request.urlopen("https://www.uniprot.org/uniprot/{}.fasta".format(uniprot_id),context=context)
self.seq_header = next(self.seq_fileobj)
print("Read in sequence information for {}.".format(self.seq_header.rstrip()))
self.b_sequence = [str(achar).encode('utf-8') for a_line in self.seq_fileobj for achar in a_line]
self.sequence = [chr(int(x)) for x in self.b_sequence]
Я немного прочитал о кодировании и декодировании строк, чтобы изменить свое понимание списка для Python 3:
self.b_sequence = [str(achar).encode('utf-8') for a_line in self.seq_fileobj for achar in a_line]
self.sequence = [chr(int(x)) for x in self.b_sequence]
Хотямой код работает - это лучший способ достичь этого результата, когда я иду от массива байтов символов ascii, закодированных с помощью utf-8, к их результирующим строкам ?. Бит chr (int (x)) - это то, что мне кажется непитонным, и я боюсь, что я что-то упускаю.