разделить строку и целое число в спецификациях c длина python - PullRequest
1 голос
/ 30 января 2020

Добрый день У всех, у меня есть вопрос, есть ли где-нибудь разделить данные на фиксированную длину?

предположим,

data=2220591972004161833372381965973430564161832220599125418620936367891254212825967504230783108294828632042934883049336591444611742626636047927395221895991254390547243063380503905471**64**

Я хочу разделить на 3 части, как:

d1=222059197200416183337238196597343056416183222059912541862093636789125421282596750423078310829482863204293488304933659144461174262663604792739522189599125439054724306338

d3=050390 >>>> length is 6

d4=5471 >>>>> length is 4

Где последние 2 цифры из data is 64 используются для определения длины d3 и d4 .

Я видел много примеров функция разбиения как список и так далее, но ничего из этого я не ищу, например здесь и здесь есть одна программа, написанная на c ++, я хочу такую ​​же, как в python здесь

еще один пример разделения данных строки на части таким же образом, последний из которых di git имеет размер x2

data2=cc32b326560de95d0fba47b5ad9072418f15caca4c39c2fe4db7003f4b8f81a79
x=cc32b326560de95d0fba47b5ad9072418f15caca4c39c2fe4db7003
x1=f4b8f81a7 >>>>length is 9 

я использую python 3.6 шпион. спасибо всем

Ответы [ 3 ]

1 голос
/ 30 января 2020
data=222059197200416183337238196597343056416183222059912541862093636789125421282596750423078310829482863204293488304933659144461174262663604792739522189599125439054724306338050390547164

data = str(data)
length_d3 = int(data[-1])
length_d2 = int(data[-2])
data = data[0:-2]

d1 = int(data[0:-(length_d3+length_d2)])
d2 = int(data[-(length_d3+length_d2):-length_d3])
d3 = int(data[-length_d3:])

print(d1)
print(d2)
print(d3)
1 голос
/ 30 января 2020

Предполагая, что data является строкой, вы можете использовать следующую функцию, которая принимает data и целое число n, которое сообщает, сколько символов следует использовать с конца строки.

def split(data, n):
    indices = list(int(x) for x in data[-n:])
    data = data[:-n]
    rv = []
    for i in indices[::-1]:
        rv.append(data[-i:])
        data=data[:-i]
    rv.append(data)
    return rv[::-1]

Использование:

>>> split(data, 2)
['222059197200416183337238196597343056416183222059912541862093636789125421282596750423078310829482863204293488304933659144461174262663604792739522189599125439054724306338',
 '050390',
 '5471']
>>> split(data2, 1)
['cc32b326560de95d0fba47b5ad9072418f15caca4c39c2fe4db7003', 'f4b8f81a7']

Если вы хотите, чтобы n всегда было 2, просто отредактируйте функцию следующим образом:

def split(data):
    indices = list(int(x) for x in data[-2:])
    data = data[:-2]
    rv = []
    for i in indices[::-1]:
        rv.append(data[-i:])
        data=data[:-i]
    rv.append(data)
    return rv[::-1]

Для назначения переменные, то вы можете использовать

>>> d1, d2, d3 = split(data)
>>> d1
'222059197200416183337238196597343056416183222059912541862093636789125421282596750423078310829482863204293488304933659144461174262663604792739522189599125439054724306338'
>>> d2
'050390'
>>> d3
'5471'
0 голосов
/ 30 января 2020

Для заданных вами c длин они будут разделены правильно

data="222059197200416183337238196597343056416183222059912541862093636789125421282596750423078310829482863204293488304933659144461174262663604792739522189599125439054724306338050390547164"
d1 = data[:-12] # From the start to 12 characters from the end
d3 = data[-12:-6] # From 12 characters from the end to 6 characters from the end
d4 = data[-6:-2] # From 6 characters from the end to 2 characters from the end
...