首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将中的包装Bytes转换为实际Bytes?

如何将中的包装Bytes转换为实际Bytes?
EN

Stack Overflow用户
提问于 2020-10-21 00:58:48
回答 2查看 87关注 0票数 0

在我的熊猫数据中有一个列,它存储字节。我相信当我将字节放入dataframe时,字节将被转换为字符串,因为dataframe不支持实际字节作为dtype。所以,列值不是b'1a2b',而是被包装在一个类似于"b'1a2b'"的字符串中。

我将这些值传递到需要字节的一种方法中。当我像这样传递它时,我会得到错误消息:

代码语言:javascript
复制
TypeError: memoryview: a bytes-like object is required, not 'str'

在这种情况下,我感到困惑的是编码或解码是否有效,还是有其他方法将包装的字节转换为字节?(我正在使用Python 3)

由于这些值位于dataframe中,所以在字符串->字节->协议缓冲区的转换过程中,我可以使用帮助器方法,因为实际的dataframe可能无法将其存储为字节。例如,my_dataframe.apply(_helper_method_convert_string_to_bytes_to_protobuf)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-21 01:37:36

因此,问题似乎在于您无法从字符串中提取字节对象。当您将字符串传递给函数时,它会抛出一个错误,该函数期待像b'1a2b'这样的字节对象。我的建议是尝试用eval函数包装字符串。比如:

代码语言:javascript
复制
a = "b'1a2b'"
b = eval(a)

B是你想要的。您还没有为您的函数共享代码,所以我无法为您修改实际代码。

票数 1
EN

Stack Overflow用户

发布于 2020-10-21 01:53:37

您可以在这里采取几种方法,注意到eval()被认为是错误的实践,最好在可能的情况下避免这一点。

  1. 在调用函数时将字节表示形式存储为字符串和encode()
  2. 从字符串中提取字节表示,然后调用encode()函数

如果可能,最好在导入数据时将bytes存储为1a2b,如果不可能,则可以使用regex提取b''之间字符串的内容,并将结果传递给encode()

代码语言:javascript
复制
import re

string = "b'1a2b'"

re.search(r"(?<=').*(?=')", string).group().encode()

输出:

代码语言:javascript
复制
#b'1a2b'
type(re.search(r"(?<=').*(?=')", string).group().encode())
#<class 'bytes'>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64455216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档