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

去掉Python字符串前面的'b'[重复]

翟俊名
2023-03-14

编辑:为了省去人们滚动的麻烦,问题源于需要输出变量的“解码”操作;我的脚本没有做到这一点。我以为“for”循环会在原地修改变量,但事实并非如此。

长话短说,我有一些netCDF文件,从中生成一系列地图。这个脚本运行良好,但是我在正确显示标题时遇到了重大问题。我从netCDF文件中获取变量,它将作为我的标题(基本上是一个简单的时间戳)。首先,我试着把它变成一个Python变量,然后用它作为情节标题。

不幸的是,我知道这是一个被称为“字节”的字符串。这意味着标题前面有一堆小写字母“b”。不仅仅是一开始。即:

b'b'i'b'T'b'l'b'e'

这是因为netCDF变量是一个屏蔽数组。我设法得到了一些可行的代码,将数组转换成列表,然后转换成字符串,一切似乎都可以工作。然而,整件事的关键是“bytes.decode()”操作。

据我所知,这个操作接受字节对象,然后将它们作为普通字符串返回。好了,这些是utf-8格式的,我检查了输入的类型,发现它们都被归类为“字节”。然而,当我尝试使用decode时,它告诉我对象不是字节,在它告诉我它们是字节之后的几分钟?请参阅下面的代码和输出/错误。

代码:

#check the type, shape, and data of times
print(type(times))
print(times.shape)
print(times.data)

#change the times masked array to a list
timeslist = times.tolist(fill_value=-9999)

#check to see if elements of the list are bytes
    for x in timeslist:
    print(type(x))

#new list for decoded chars
fixedtimeslist = []

#decode the bytes list      
for x in timeslist:
    bytes.decode('utf-8')
    fixedtimeslist.append(x)   

输出/错误:

<class 'numpy.ma.core.MaskedArray'>
(19,)
[b'2' b'0' b'1' b'2' b'-' b'1' b'0' b'-' b'0' b'4' b'_' b'0' b'3' b':' b'0' b'0' b':' b'0' b'0']
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
Traceback (most recent call last):
  File "Wind10.py", line 82, in <module>
    bytes.decode('utf-8')
TypeError: descriptor 'decode' requires a 'bytes' object but received a 'str'

编辑:一些人问过,是的,我在迭代前尝试过使用“x.decode”来做到这一点。当我改为这样做,并重新检查类型时,它仍然是字节。

代码:

#decode the bytes list
for x in timeslist:
    x.decode('utf-8')
    fixedtimeslist.append(x)

#recheck to see if decode worked
for x in fixedtimeslist:
    print(type(x))

输出:

(19,)
[b'2' b'0' b'1' b'2' b'-' b'1' b'0' b'-' b'0' b'4' b'_' b'0' b'3' b':' b'0' b'0' b':' b'0' b'0']
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>
<class 'bytes'>

所以我有点不知所措,不知该怎么处理这个问题。我不知道我是否只是不理解语义,或者我发现了一个bug或者什么。

我意识到有人提出过类似的问题,我也看到过,并试图模仿他们的解决方案,但没有成功。这是我尝试过的第四次或第五次程序迭代。要么解码似乎什么都不做(即:字符串仍然有b''部分),要么我得到了这个错误。

如果有必要的话,我想我正在CentOS 6.8上使用Python 3.6 miniconda。

感谢您的任何帮助!我道歉,如果这是微不足道的;我不是计算机科学家。

共有2个答案

空翼
2023-03-14

我想你的意思是x.decode('utf-8')。我对字节对象没有任何经验,但我相信这就是你想要的

阎建德
2023-03-14

您必须将x解码为字节,并将返回值附加到fixedtimeslist列表中。

for x in timeslist:
    fixedtimeslist.append(x.decode('utf-8'))
 类似资料:
  • 本文向大家介绍JS去掉字符串前后空格或去掉所有空格的用法,包括了JS去掉字符串前后空格或去掉所有空格的用法的使用技巧和注意事项,需要的朋友参考一下 1、  去掉字符串前后所有空格: 代码如下:     说明:     如果使用jQuery直接使用$.trim(str)方法即可,str表示要去掉前后所有空格的字符串。  2、 去掉字符串中所有空格(包括中间空格,需要设置第2个参数为:g) 代码如下:

  • 问题内容: 我是python编程的新手,我有点困惑。我尝试从字符串中获取字节以进行哈希和加密,但是我得到了 字符串前面的b字符,如以下示例所示。有什么办法可以避免这种情况吗?有人可以提供解决方案吗?对不起这个愚蠢的问题 输出: 问题答案: 解码是多余的 首先,您对这种情况有误解,这是因为对所发生的事情有误解。 您会得到,因为您已对其进行编码,现在它是一个字节对象。 修正: 您可以先打印字符串 编码

  • 问题内容: 显然,以下是有效的语法 我想知道: 这是什么b字在前面的字符串是什么意思? 使用它有什么作用? 在什么情况下可以使用它? 我在SO上找到了一个相关的问题,但是这个问题是关于PHP的,它指出b用来表示字符串是二进制的,而不是是要从版本兼容的代码,当迁移到PHP 6时。我认为这不适用于Python。 我确实在Python站点上找到了有关使用相同语法的字符将字符串指定为的文档。不幸的是,它在

  • 本文向大家介绍去掉字符串前后所有空格的正则表达式,包括了去掉字符串前后所有空格的正则表达式的使用技巧和注意事项,需要的朋友参考一下 正则表达式,又称正规表示法、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索

  • 本文向大家介绍Python 去除字符串中指定字符串,包括了Python 去除字符串中指定字符串的使用技巧和注意事项,需要的朋友参考一下 1、背景 最近的项目中,再次踩到Python字符串处理的坑,决定把此次解决方案记录一下,以勿踩坑。 2、遇到坑 原本字符串:大坪英利国际8号楼88-88号重庆汉乔科技有限公司大坪英利国际8号楼 去除最左边的字符串:大坪英利国际8号楼 预期结果:88-88号重庆汉乔

  • 问题内容: 将字符串创建为inary 有什么后果? 我在文档中找不到关于此的任何提示。刚刚在查看language_scanner时发现了这种好奇心。 问题答案: 这是永不发布的PHP版本6的前向兼容性令牌,该版本应具有本机unicode支持。 在PHP6中,字符串默认为unicode,函数在其上的unicode字符级别上运行。“ b”表示“二进制字符串”,即非unicode字符串,在其上功能以字节

  • 本文向大家介绍写一个方法去掉字符串中的空格相关面试题,主要包含被问及写一个方法去掉字符串中的空格时的应答技巧和注意事项,需要的朋友参考一下

  • 本文向大家介绍Oracle截取字符串去掉字段末尾指定长度的字符,包括了Oracle截取字符串去掉字段末尾指定长度的字符的使用技巧和注意事项,需要的朋友参考一下 lengthb(string)计算string所占的字节长度:返回字符串的长度,单位是字节 length(string)计算string所占的字符长度:返回字符串的长度,单位是字符 eg: 【备注】一个汉字在Oracle数据库里占多少字节跟