相关疑难解决方法(0)

Python:将原始字符串转换为字节字符串而不添加转义字符

我有一个字符串:

'BZh91AY&SYA\xaf\x82\r\x00\x00\x01\x01\x80\x02\xc0\x02\x00 \x00!\x9ah3M\x07<]\xc9\x14\xe1BA\x06\xbe\x084'
Run Code Online (Sandbox Code Playgroud)

而且我要:

b'BZh91AY&SYA\xaf\x82\r\x00\x00\x01\x01\x80\x02\xc0\x02\x00 \x00!\x9ah3M\x07<]\xc9\x14\xe1BA\x06\xbe\x084'
Run Code Online (Sandbox Code Playgroud)

但我不断得到:

b'BZh91AY&SYA\\xaf\\x82\\r\\x00\\x00\\x01\\x01\\x80\\x02\\xc0\\x02\\x00 \\x00!\\x9ah3M\\x07<]\\xc9\\x14\\xe1BA\\x06\\xbe\\x084'
Run Code Online (Sandbox Code Playgroud)

语境

我从网页上刮下一个字符串并将其存储在变量中un。现在我想用 BZip2 解压它:

bz2.decompress(un)
Run Code Online (Sandbox Code Playgroud)

但是,由于un是一个str对象,我收到此错误:

TypeError: a bytes-like object is required, not 'str'
Run Code Online (Sandbox Code Playgroud)

因此,我需要在un不将单个反斜杠更改为转义反斜杠的情况下转换为类似字节的对象。

编辑1: 感谢您的所有帮助!@wim 我现在明白你的意思了,但我不知道如何从我的网页抓取方法中检索一个类似字节的对象:

r = requests.get('http://www.pythonchallenge.com/pc/def/integrity.html')

doc = html.fromstring(r.content)
comment = doc.xpath('//comment()')[0].text.split('\n')[1:3]

pattern = re.compile("[a-z]{2}: '(.+)'")

un = re.search(pattern, comment[0]).group(1)
Run Code Online (Sandbox Code Playgroud)

该包是我使用的是requestslxml.htmlre,和bz2

再次,我的目标是解压un使用bz2,但我有困难,从我webscraping过程中得到一个字节状物体。

任何指针?

python lxml python-3.x lxml.html bz2

5
推荐指数
0
解决办法
2410
查看次数

struct.error: 's' 的参数必须是 python 3.4 中的字节对象

我试图在 python 3.4 中使用的代码:

#!/usr/bin/python3
 def get_mac_addr(ifname):
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    info = fcntl.ioctl(s.fileno(), 0x8927,  struct.pack('256s', ifname[:15]))
    return ''.join(['%02x:' % ord(char) for char in info[18:24]])[:-1]
 print (get_mac_addr('eth0'))

Error: struct.error: argument for 's' must be a bytes object
Run Code Online (Sandbox Code Playgroud)

我看到这段代码在不使用 python3 时确实有效,但我的项目需要在 3 中使用它。我尝试与问题进行比较:Struct.Error, Must Be a Bytes Object? 但我不知道如何将其应用到自己身上。

python networking

4
推荐指数
1
解决办法
6180
查看次数

如何在 Kafka-Python 中指定字节数组序列化器/反序列化器

org.apache.kafka.common.serialization.ByteArraySerializerKafka 的 Producer API 中有一个用于 Java 的类,还有一个org.apache.kafka.common.serialization.ByteArrayDeserializer用于 Consumer API 的类。

如果您在 Python 中使用 Kafka,是否有等效的类?

python apache-kafka kafka-consumer-api kafka-producer-api

4
推荐指数
1
解决办法
8817
查看次数

如何在 Python 中将文本字符串编码为数字?

假设您有一个字符串:

mystring = "Welcome to the InterStar cafe, serving you since 2412!"
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种将该字符串转换为数字的方法,例如:

encoded_string = number_encode(mystring)

print(encoded_string)

08713091353153848093820430298
Run Code Online (Sandbox Code Playgroud)

..您可以转换回原始字符串。

decoded_string = number_decode(encoded_string)

print(decoded_string)

"Welcome to the InterStar cafe, serving you since 2412!"
Run Code Online (Sandbox Code Playgroud)

它不必是加密安全的,但无论它在什么计算机上运行,​​它都必须为相同的字符串输出相同的数字。

python python-3.x

4
推荐指数
1
解决办法
4238
查看次数

读取 pem 证书期间 python 3.6 出现 x509 错误

在我的 python 代码中,我面临以下问题:

Traceback (most recent call last):
  File "/tmp/mod_wsgi-localhost:5000:0/handler.wsgi", line 94, in <module>
    recorder_directory=recorder_directory)
  File "/usr/lib64/python3.6/site-packages/mod_wsgi/server/__init__.py", line 1400, in __init__
    exec(code, self.module.__dict__)
  File "/app/scripts/core.wsgi", line 1, in <module>
    from core_nbi import core_ws as application
  File "/app/core_if_nbi.py", line 357, in <module>
    coreApi.start()
  File "/app/core.py", line 250, in wrapper
    return func(self, *args, **kwargs)
  File "/app/core.py", line 646, in start
    self.otkHandler.loadCertificate()
  File "/app/core.py", line 294, in loadCertificate
    default_backend())
  File "/usr/lib64/python3.6/site-packages/cryptography/x509/base.py", line 50, in load_pem_x509_certificate
    return backend.load_pem_x509_certificate(data)
  File "/usr/lib64/python3.6/site-packages/cryptography/hazmat/backends/openssl/backend.py", line 1143, in load_pem_x509_certificate …
Run Code Online (Sandbox Code Playgroud)

cryptography certificate pem x509 python-3.x

4
推荐指数
1
解决办法
6203
查看次数

如何在python代码中使用SHA256-HMAC?

我正在从此URL获取消息和密钥

import hmac
import hashlib
import base64
my = "/api/embedded_dashboard?data=%7B%22dashboard%22%3A7863%2C%22embed%22%3A%22v2%22%2C%22filters%22%3A%5B%7B%22name%22%3A%22Filter1%22%2C%22value%22%3A%22value1%22%7D%2C%7B%22name%22%3A%22Filter2%22%2C%22value%22%3A%221234%22%7D%5D%7D"
key = "e179017a-62b0-4996-8a38-e91aa9f1"
print(hashlib.sha256(my + key).hexdigest())
Run Code Online (Sandbox Code Playgroud)

我得到这个结果:

2df1d58a56198b2a9267a9955c31291cd454bdb3089a7c42f5d439bbacfb3b88
Run Code Online (Sandbox Code Playgroud)

预期结果:

adcb671e8e24572464c31e8f9ffc5f638ab302a0b673f72554d3cff96a692740
Run Code Online (Sandbox Code Playgroud)

python oauth sha256 hmac

3
推荐指数
3
解决办法
8465
查看次数

将输入()转换为 Python 3 中的字节?

自从我开始使用 Python 的第 3 版以来,我在通过套接字发送字符串时遇到了很多问题。我知道要在套接字中发送字符串,'b'必须在字符串之前放置a才能将其转换为字节。但是当我必须将 an 转换input()为字节时会发生什么?它是如何完成的?

我需要将键盘写入的消息发送到套接字:

import socket

client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(("localhost",7500))

msg = input()
client.send(msg) 
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试时,出现以下错误:

TypeError: a bytes-like object is required, not 'str'
Run Code Online (Sandbox Code Playgroud)

有人可以告诉我如何转换input()为字节吗?我总是使用 2.7 版本,我不明白为什么版本 3 对套接字的处理如此刺激。:(

python python-3.x

3
推荐指数
1
解决办法
9107
查看次数

python预防措施,以节省纯数字字符的文本文件的大小

我列出了一些网络分析的大量输出,列出了每行的边缘,这导致了几十GB,延长了我的资源限制(低估).因为我只处理数值,所以我想到我可能比使用Py3k默认值更聪明.即如果我只有数字(以及空格和偶尔的小数点),其他一些字符编码可能会为我节省相当多的空间.由于受到限制,我甚至可以保存在行结尾(不要将Windows标准CRLF复制).这方面的最佳做法是什么?

示例行将如下所示:

62233 242344 0.42442423

(实际上最后一个数字实际上是毫无意义的,我会将它切回三个非零数字.)

因为我需要在文本文件中读取其他软件(实际上是Stata),我不能将数据保存在任意二进制文件中,尽管我看不出为什么Stata只会读取UTF-8文本.或者你只是说避免使用UTF-8几乎不能为我节省任何费用?

我认为压缩对我来说不起作用,因为我逐行写文本,即使在此期间限制输出大小也是很好的.我可能很容易弄错压缩是如何工作的,但我认为它可以在文件生成后节省空间,但我的问题是我的代码崩溃已经因为我正在制作文本文件(逐行).

感谢所有想法和澄清问题!

python io performance character-encoding python-3.x

2
推荐指数
1
解决办法
197
查看次数

在 Python3 中将字节转换为字符串并正确返回?

给定一个随机字节(即不仅是数字/字符!),我需要将其转换为字符串,然后不丢失信息的情况下返回初始字节。这似乎是一项基本任务,但我遇到了以下问题:

假设:

rnd_bytes = b'w\x12\x96\xb8'
len(rnd_bytes)
Run Code Online (Sandbox Code Playgroud)

印刷: 4

现在,将其转换为字符串。注意:我需要设置backslashreplace,否则它会返回“UnicodeDecodeError”,否则会丢失将其设置为另一个标志值的信息。

my_str = rnd_bytes.decode('utf-8' , 'backslashreplace')
Run Code Online (Sandbox Code Playgroud)

现在,我有了字符串。我想将它转换回原来的字节(大小为 4!):

根据 python 资源和这个答案,有不同的可能性:

conv_bytes = bytes(my_str, 'utf-8')
conv_bytes = my_str.encode('utf-8')
Run Code Online (Sandbox Code Playgroud)

但是 len(conv_bytes) 返回10.

我试着分析结果:

>>> repr(rnd_bytes)
"b'w\\x12\\x96\\xb8'"
>>> repr(my_str)
"'w\\x12\\\\x96\\\\xb8'"
>>> repr(conv_bytes)
"b'w\\x12\\\\x96\\\\xb8'"
Run Code Online (Sandbox Code Playgroud)

更换'\\\\'. my_str.replace('\\\\','\\')不会改变任何东西。可能是因为四个反斜杠只代表两个。所以,my_str.replace('\\','\')会找到'\\\\',但是会导致

语法错误:扫描字符串文字时 EOL

由于最后一个论点'\'。这已经在这里讨论,其中提出了以下建议:

>>> my_str2=my_str.encode('utf_8').decode('unicode_escape')
>>> repr(my_str2)
"'w\\x12\\x96¸'"
Run Code Online (Sandbox Code Playgroud)

这取代了'\\\\'但似乎添加/更改了一些其他字符:

>>> conv_bytes2 = …
Run Code Online (Sandbox Code Playgroud)

byte type-conversion python-3.x

2
推荐指数
1
解决办法
2940
查看次数

字符串-Python 3.5需要写一个类似字节的对象,而不是'str'

我下面的python代码适用于Python 2,

只写一次标题

if header_written == False:
    header = out_data.keys()
    writer.writerow(out_data.keys()) # write headers
    header_written = True
Run Code Online (Sandbox Code Playgroud)

写值

writer.writerow(out_data.values()) #write rows
del out_data  #del object
del row_data #del dict object
Run Code Online (Sandbox Code Playgroud)

但是在Python 3中,它返回以下错误:

TypeError:需要一个类似字节的对象,而不是'str'

string types python-3.x

2
推荐指数
2
解决办法
9669
查看次数