python заменить \\ на \ в строке - PullRequest
0 голосов
/ 28 мая 2020

В Python 2 Я создаю дайджест-значение с помощью hashlib.md5 из заданной строки и применяю некоторые logi c к выходной строке, например, функцию ord для строковых символов.

Я переношу код на Python3 и сталкиваются с двумя проблемами: 1-й: md5 ожидает байтов и выводит байты -> поэтому я даю ему строку в кодировке latin1 в соответствии с кодировкой по умолчанию Python2. Тип вывода отличается от Python2, поэтому я конвертирую байты в строку, чтобы я мог ввести строковую переменную с правильным значением в лог постобработки c, который применяет функцию ord к строковым символам.

Возникает вопрос: как получить требуемый вывод из байтов md5 с модификацией моего logi c постобработки чистым способом?

В настоящее время я конвертирую байты в строку грязным способом: str (bytes) [2: -1] и не знаю, как заменить '\' на '\' в:

Python2 .7:

import hashlib

s = "foo"
res = hashlib.md5(s).digest()
[ord(i) for i in res]

ВЫХОД:

[172, 189, 24, 219, 76, 194, 248, 92, 237, 239, 101, 79, 204, 196, 164, 216]

Обратите внимание, что я не могу заменить digest () на hexdigest (), так как я должен достичь вышеуказанного выходного значения.

Итак, В Python3:

import hashlib

s = "foo"
res = hashlib.md5(s).digest()

Я получаю:

TypeError: Unicode-objects must be encoded before hashing

Итак, я делаю:

res = hashlib.md5(s.encode('latin1')).digest()

и теперь получаю:

b'\xac\xbd\x18\xdbL\xc2\xf8\\\xed\xefeO\xcc\xc4\xa4\xd8'

Итак, я хочу заменить '\' на '\':

res.replace(r"\\", r"\")

, но получаю:

SyntaxError: EOL while scanning string literal

Я пытаюсь заменить обратную косую черту поэтому я могу получить правильное строковое значение, чтобы я мог применить правильное logi c, давая мне правильный результат:

[ord(i) for i in res]
[172, 189, 24, 219, 76, 194, 248, 92, 237, 239, 101, 79, 204, 196, 164, 216]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...