gpt4 book ai didi

python - 更多 pythonic 在处理 urllib 响应时将字节转换为字符串而不是 chr(int(x))

转载 作者:行者123 更新时间:2023-12-01 07:10:17 25 4
gpt4 key购买 nike

我迟到了转换为 Python 3。我正在尝试使用 urllib 处理蛋白质序列的 REST api 的输出。

在旧版 python 中我可以使用:

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]

尽管我的代码正在运行,但这是实现此结果的最佳方法吗?我从使用 utf-8 编码的 ascii 字符字节数组转换为结果字符串? chr(int(x)) 位对我来说似乎不符合 Python 风格,我担心我可能会遗漏一些东西。

最佳答案

您不需要逐个字符地将字节转换为字符串。由于您想去掉换行符,因此可以将整个文件作为字节读取,使用 decode 方法将字节转换为字符串(默认为 utf-8) > 您正在使用的编码)并使用 str.replace 方法删除换行符:

self.sequence = list(self.seq_fileobj.read().decode().replace('\n', ''))

关于python - 更多 pythonic 在处理 urllib 响应时将字节转换为字符串而不是 chr(int(x)),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58258455/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com