Converting from Python 2 to Python 3: TypeError: a bytes-like object is required
Converting from Python 2 to Python 3: TypeError: a bytes-like object is required
我得到了以下 Python 2x 代码。我通过将 import urllib2
更改为 from urllib.request import urlopen
将其转换为 Python 3x。我摆脱了 urllib2 参考和 运行 程序。检索到 url 末尾的文档,但程序在指示的行失败,抛出错误
TypeError: a bytes-like object is required, not 'str'
文档如下所示:b'9306112 9210128 9202065 \r\n9306114 9204065 9301122 \r\n9306115 \r\n9306116 \r\n9306117 \r\n9306118 \r\n9306119
我尝试在该行和上面的行中使用 return 值(例如,转换为字节,拆分不同的值),但没有任何效果。对正在发生的事情有什么想法吗?
import urllib2
CITATION_URL = "http://storage.googleapis.com/codeskulptor-alg/alg_phys-cite.txt"
def load_graph(graph_url):
"""
Function that loads a graph given the URL
for a text representation of the graph
Returns a dictionary that models a graph
"""
graph_file = urllib2.urlopen(graph_url)
graph_text = graph_file.read()
graph_lines = graph_text.split('\n') <--- The Problem
graph_lines = graph_lines[ : -1]
print "Loaded graph with", len(graph_lines), "nodes"
answer_graph = {}
for line in graph_lines:
neighbors = line.split(' ')
node = int(neighbors[0])
answer_graph[node] = set([])
for neighbor in neighbors[1 : -1]:
answer_graph[node].add(int(neighbor))
return answer_graph
citation_graph = load_graph(CITATION_URL)
print(citation_graph)
为了将 bytes
对象视为字符串,您需要先对其进行解码。例如:
graph_text = graph_file.read().decode("utf-8")
如果编码是 UTF-8。这应该允许您将其视为字符串而不是字节序列。
您只能将喜欢与喜欢分开 - 如果您想与 \n
分开,同时仍将 graph_text
保持为 bytes
,请将拆分定义为 bytes
序列, 还有:
graph_lines = graph_text.split(b'\n')
否则,如果您知道 graph_text
数据的编解码器,请先将其解码为 str
并使用:graph_text.decode("<codec>")
然后继续将其视为 str
.
我得到了以下 Python 2x 代码。我通过将 import urllib2
更改为 from urllib.request import urlopen
将其转换为 Python 3x。我摆脱了 urllib2 参考和 运行 程序。检索到 url 末尾的文档,但程序在指示的行失败,抛出错误
TypeError: a bytes-like object is required, not 'str'
文档如下所示:b'9306112 9210128 9202065 \r\n9306114 9204065 9301122 \r\n9306115 \r\n9306116 \r\n9306117 \r\n9306118 \r\n9306119
我尝试在该行和上面的行中使用 return 值(例如,转换为字节,拆分不同的值),但没有任何效果。对正在发生的事情有什么想法吗?
import urllib2
CITATION_URL = "http://storage.googleapis.com/codeskulptor-alg/alg_phys-cite.txt"
def load_graph(graph_url):
"""
Function that loads a graph given the URL
for a text representation of the graph
Returns a dictionary that models a graph
"""
graph_file = urllib2.urlopen(graph_url)
graph_text = graph_file.read()
graph_lines = graph_text.split('\n') <--- The Problem
graph_lines = graph_lines[ : -1]
print "Loaded graph with", len(graph_lines), "nodes"
answer_graph = {}
for line in graph_lines:
neighbors = line.split(' ')
node = int(neighbors[0])
answer_graph[node] = set([])
for neighbor in neighbors[1 : -1]:
answer_graph[node].add(int(neighbor))
return answer_graph
citation_graph = load_graph(CITATION_URL)
print(citation_graph)
为了将 bytes
对象视为字符串,您需要先对其进行解码。例如:
graph_text = graph_file.read().decode("utf-8")
如果编码是 UTF-8。这应该允许您将其视为字符串而不是字节序列。
您只能将喜欢与喜欢分开 - 如果您想与 \n
分开,同时仍将 graph_text
保持为 bytes
,请将拆分定义为 bytes
序列, 还有:
graph_lines = graph_text.split(b'\n')
否则,如果您知道 graph_text
数据的编解码器,请先将其解码为 str
并使用:graph_text.decode("<codec>")
然后继续将其视为 str
.