Тоже про питон

User avatar
Uzito
Уже с Приветом
Posts: 8239
Joined: 06 Feb 2002 10:01
Location: NJ, USA

Тоже про питон

Post by Uzito »

Страдал конвертированием сигнала с девайса (показания амплитуды +/-) в base64. Изобрёл колесо или может что-то попроще есть?
Входные данные - текстовая строка с 10000+ значениями разделенная пробелами.

Code: Select all

import base64

dec = '10 20 30 400 500 60 30 -100 -200 -300 -500 -600'
dec = list(map(lambda x: hex((int(x) + (1 << 16)) % (1 << 16))[2::].zfill(4), dec.split()))
print(dec)
hec = ''
for w in dec:
	hec += w[2::] + ' ' + w[:2:] + ' '
print(hec)
result = base64.b64encode(bytearray.fromhex(hec)).decode('ascii')
print(result)
User avatar
Duck
Уже с Приветом
Posts: 4453
Joined: 11 Apr 2003 22:29
Location: SFBA

Re: Тоже про питон

Post by Duck »

если работает то и ладно, хотя ниразу не pythonic
Поздравляю тебя Шарик, ты балбес!
User avatar
liamkin
Уже с Приветом
Posts: 2603
Joined: 19 Jun 2003 20:22
Location: USA

Re: Тоже про питон

Post by liamkin »

Uzito wrote: 29 Sep 2019 01:45 Страдал конвертированием сигнала с девайса (показания амплитуды +/-) в base64. Изобрёл колесо или может что-то попроще есть?
Входные данные - текстовая строка с 10000+ значениями разделенная пробелами.

Code: Select all

import base64

dec = '10 20 30 400 500 60 30 -100 -200 -300 -500 -600'
dec = list(map(lambda x: hex((int(x) + (1 << 16)) % (1 << 16))[2::].zfill(4), dec.split()))
print(dec)
hec = ''
for w in dec:
	hec += w[2::] + ' ' + w[:2:] + ' '
print(hec)
result = base64.b64encode(bytearray.fromhex(hec)).decode('ascii')
print(result)
Совсем не понял, на фига вы в hex конвертируете? Неужели нельзя из decimal напрямую в bytearray?
User avatar
Uzito
Уже с Приветом
Posts: 8239
Joined: 06 Feb 2002 10:01
Location: NJ, USA

Re: Тоже про питон

Post by Uzito »

liamkin wrote: 17 Oct 2019 20:24 Совсем не понял, на фига вы в hex конвертируете? Неужели нельзя из decimal напрямую в bytearray?
Мне нужно не строку закодировать, а значения из строки.
"0 -1 -2 -1 0 1 2 1 0" -> "00 00 FF FF FE FF FF FF 00 00 01 00 02 00 01 00 00 00"

bytearray.fromhex есть, а bytearray.fromdec нету.

Переписал в одну строку

Code: Select all

import base64
dec = '10 20 30 400 500 60 30 -100 -200 -300 -500 -600'
result = base64.b64encode(b''.join(map(lambda x: int(x).to_bytes(2, byteorder='little', signed=True), dec.split()))).decode('ascii')
print(result)
User avatar
f_evgeny
Уже с Приветом
Posts: 10367
Joined: 12 Apr 2001 09:01
Location: Lithuania/UK

Re: Тоже про питон

Post by f_evgeny »

Uzito wrote: 17 Oct 2019 20:36 Переписал в одну строку
Зачем? Какой в этом смысл?
Однострочники плохо читаются. А Вы пишете однострочник, чтобы спросить о нем на форуме. Казалось бы уместно бы было написать как можно проще.
Тем более, что строка у Вас получилась длиной 132 символа, а вообще-то рекомендуется не больше 80-ти.
Дальше, все будет только хуже. Оптимист.
User avatar
Uzito
Уже с Приветом
Posts: 8239
Joined: 06 Feb 2002 10:01
Location: NJ, USA

Re: Тоже про питон

Post by Uzito »

f_evgeny wrote: 17 Oct 2019 21:07 Зачем? Какой в этом смысл?
Да никакого. Мне нужен был совет по первой версии.
За две недели так никто и не подсказал что можно сделать number.to_bytes
User avatar
f_evgeny
Уже с Приветом
Posts: 10367
Joined: 12 Apr 2001 09:01
Location: Lithuania/UK

Re: Тоже про питон

Post by f_evgeny »

Uzito wrote: 17 Oct 2019 22:58
f_evgeny wrote: 17 Oct 2019 21:07 Зачем? Какой в этом смысл?
Да никакого. Мне нужен был совет по первой версии.
За две недели так никто и не подсказал что можно сделать number.to_bytes
С моей точки зрения, вопрос задан плохо. И одна из плохих черт - длинный однострочник. Непонятно, что там с одного взгляда. Я лично ненавижу однострочники. Потому, что не видно издалека, что там происходит. Ну и вообще, такие вопросы нужно в гугле задавать. Типа: "python3 how to convert number to bytes".
Здесь - для поболтать, если тема покажется интересной.
.
Дальше, все будет только хуже. Оптимист.

Return to “Вопросы и новости IT”