当前位置: 首页 > 知识库问答 >
问题:

TypeError:需要类似字节的对象,而不是使用BytesIO的“str”

有翰海
2023-03-14

我得到一个“TypeError:需要一个类似字节的对象,而不是'str'”。我在使用StringIO时遇到了一个错误“TypeError:initial_值必须是str或None,而不是bytes”,我在使用Python 3.7。

    # Location of Alexa 1M
ALEXA_1M = 'http://s3.amazonaws.com/alexa-static/top-1m.csv.zip'

# Our ourput file containg all the training data
DATA_FILE = 'traindata.pkl'

def get_alexa(num, address=ALEXA_1M, filename='top-1m.csv'):
    """Grabs Alexa 1M"""

    url = urlopen(address)
zipfile = ZipFile(BytesIO(url.read()))
return [tldextract.extract(x.split(',')[1]).domain for x in \
        zipfile.read(filename).decode('utf-8').split()[:num]]

我也得到这个函数同样的错误。"返回pickle.load(打开(DATA_FILE))"

"""Grab all data for train/test and save

    force:If true overwrite, else skip if file
          already exists
    """
    if force or (not os.path.isfile(DATA_FILE)):
        domains, labels = gen_malicious(10000)

        # Get equal number of benign/malicious
        domains += get_alexa(len(domains))
        labels += ['benign']*len(domains)

        pickle.dump(zip(labels, domains), open(DATA_FILE, 'w').decode("utf-8"))

def get_data(force=False):
    """Returns data and labels"""
    gen_data(force)

    return pickle.load(open(DATA_FILE))

共有1个答案

崔博延
2023-03-14

这个错误基本上说你的字符串是字节串。为了解决这个问题,我认为你可以尝试使用. decode('utf-8')

url = urlopen(address)
zipfile = ZipFile(BytesIO(url.read()))
return [tldextract.extract(x.split(',')[1]).domain for x in \
        zipfile.read(filename).decode('utf-8').split()[:num]]
 类似资料:
  • 以下是尝试使用套接字修改用户提供的输入的代码: 当我执行它并提供输入时,会发生以下错误: 我能做些什么来解决这个问题?

  • 问题内容: 几年前,我正在使用一个先前提出的问题的代码,但是,我认为这已经过时了。尝试运行代码,我收到上述错误。我仍然是Python的新手,因此无法从类似的问题中得到很多澄清。有人知道为什么会这样吗? 追溯 问题答案: 默认情况下返回stdout或stderr流的对象。这意味着您还需要在针对这些对象的操作中使用对象。使用对象。使用字节文字(注意前缀): 或先解码数据(如果您知道所使用的编码)(通常

  • 我正在运行一个代码,但这一行出现错误: TypeError:需要一个类似字节的对象,而不是str 这里显示的是类型列表的各个部分,是 TypeError:需要一个类似字节的对象,而不是str

  • 我最近迁移到Python 3.5。此代码在Python 2.7中正常工作: 升级到3.5后,我得到了: TypeError:需要类似字节的对象,而不是'str' 错误在最后一行(模式搜索代码)。 我试过使用函数,并尝试: -没用。 我能够解决几乎所有的Python

  • 我试图创建一个程序,在本地机器上打开一个端口,让其他人通过netcat连接到它。我现在的代码是。 我是新的Python和套接字。但是当我运行这段代码时,它将允许我发送一个带有命令的netcat连接: 但是在我的Python脚本中,我得到了c.send的错误: 我基本上只是尝试打开一个端口,允许netcat连接,并在该机器上安装一个完整的外壳。

  • 问题内容: 我最近已经迁移到Py 3.5。这段代码在Python 2.7中正常工作: 升级到3.5后,我得到了: 最后一行错误(模式搜索代码)。 我试过使用语句两侧的函数,也尝试过: -无济于事。 我能够很快解决几乎所有的问题,但是这个小小的声明困扰着我。 问题答案: 你以二进制模式打开文件: 这意味着从文件读取的所有数据都作为bytes对象而不是作为对象返回。然后,你不能在容纳测试中使用字符串: