gpt4 book ai didi

python - 去掉 Python 字符串前面的 'b'

转载 作者:太空宇宙 更新时间:2023-11-04 04:35:43 30 4
gpt4 key购买 nike

<分区>

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

长话短说,我有一些 netCDF 文件,我从中生成了一系列 map 。该脚本工作正常,但我在正确显示标题时遇到了重大问题。我从 netCDF 文件中获取变量作为我的标题(基本上是一个简单的时间戳)。首先,我尝试将其设为 Python 变量,然后将其用作绘图标题。

不幸的是,我了解到它就是所谓的“字节”字符串。这意味着标题前面有一堆小写的“b”。一开始不只是一个。即:

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

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

据我了解,此操作接收字节对象,然后将它们作为纯字符串返回。 Afaik,这些是 utf-8,我检查了输入的类型,发现它们都被归类为“字节”。然而,当我尝试使用解码时,它告诉我对象不是字节,就在它告诉我它们是字节之后的片刻?请参阅下面的代码和输出/错误。

代码:

#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'>

所以我有点不知道如何处理这个问题。我不知道我是否只是不理解语义中的某些内容,或者我发现了一个错误或什么。

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

如果重要的话,我认为我在 CentOS 6.8 上使用 Python 3.6 miniconda。

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

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