如何获取由列表Python中的项目组成的整数中的前导零

时间:2019-03-10 01:44:32

标签: python python-3.x

我正在尝试创建一个由serval modbus寄存器构造的六位数数字。 我不知道modbus寄存器的工作方式,但是能够将某些数字映射为十进制值。

示例

'12336': '00', 
'12592': '01', 
'12848': '02', 
'13104': '03',
.
.
.
'14649': '99'

我创建了一个字典,其中包含从00到99的数字的完整列表,我开始读取3个holdng寄存器并对其进行迭代,并创建一个空列表,该空列表中填充有对应于字典中key:value对的值,然后我加入他们并转换为整数,希望得到6位数字。仅当我的数字中没有前导零时,这种方法才有效;但是,如果我确实得到前导零,则我的数字会减少到该有效数字的起始位置。

我的代码

NUMBERS  = {
    '12336': '00', '12592': '01', '12848': '02', '13104': '03', '13360': '04', '13616': '05', '13872': '06', '14128': '07', '14384': '08', '14640': '09', '12337': '10',

    }




def scanned_code():
    code = client.read_holding_registers(1, 3, unit=0)
    r = code.registers
    print(r)
    value = []

    for i in r :
        value.append(NUMBERS[str(i)])
    return value

def numb(lista):
    print(lista)
    res = int("".join(map(str, lista)))
    return res



scan_job = numb(scanned_code())
print(scan_job)

比方说,我有3个保持寄存器,其值如下: 12336、13360、14128 我会生成该数字 000407 。相反,我得到 407

执行脚本时终端获得的实际值

[12592, 13360, 14128]
['01', '04', '07']
10407

[12336, 13360, 14128]
['00', '04', '07']
407

1 个答案:

答案 0 :(得分:3)

在Python(以及几乎所有其他编程语言)中,数字存储为二进制整数。因此,“前导零”的概念毫无意义:对于计算机,123000123的存储方式完全相同。 (而且,实际上,数学家会说它们表示完全相同的值。)

如果要以零开头,则应将值存储为字符串。只需删除int函数中的numb调用即可。