【问题标题】:Replicate CONCATENATE and IF excel formula in python在python中复制CONCATENATE和IF excel公式
【发布时间】:2021-07-14 07:50:39
【问题描述】:

我有一个 Excel 文件,可以将十六进制值转换为二进制,将二进制转换为十进制和字符串:

使用 Python 我可以使用以下代码将十六进制复制到二进制:

# reverse hex value
my_hexdata = "4FA73E84FA4B6C4A"
scale = 16 # equal to hexadecimal
bin(int(my_hexdata, scale))[2:].zfill(len(my_hexdata)*4)

## Result == 0100111110100111001111101000010011111010010010110110110001001010

excel的第3列将二进制转换为十进制并转换为文本。我正在尝试在 Python 中执行此操作。我想将此公式复制到 Python 中,但我无法做到:

=CONCATENATE(CHAR(IF((BIN2DEC((MID(B2,58,7))))>32,
(BIN2DEC((MID(B2,58,7)))),32)),CHAR(IF((BIN2DEC((MID(B2,51,7))))>32,
(BIN2DEC((MID(B2,51,7)))),32)),CHAR(IF((BIN2DEC((MID(B2,44,7))))>32,
(BIN2DEC((MID(B2,44,7)))),32)),CHAR(IF((BIN2DEC((MID(B2,37,7))))>32,
(BIN2DEC((MID(B2,37,7)))),32)),CHAR(IF((BIN2DEC((MID(B2,30,7))))>32,
(BIN2DEC((MID(B2,30,7)))),32)),CHAR(IF((BIN2DEC((MID(B2,23,7))))>32,
(BIN2DEC((MID(B2,23,7)))),32)),CHAR(IF((BIN2DEC((MID(B2,16,7))))>32,
(BIN2DEC((MID(B2,16,7)))),32)),CHAR(IF((BIN2DEC((MID(B2,9,7))))>32,
(BIN2DEC((MID(B2,9,7)))),32)),CHAR(IF((BIN2DEC((MID(B2,2,7))))>32,
(BIN2DEC((MID(B2,2,7)))),32)))

我需要的结果是这些输入十六进制值对及其输出文本。

A426BC8C48E25A45    JD-FLPKRT    
A426B48F41251BE4    JD-BOBTXN    
6D66BC8C48E25A45    VM-FLPKRT    
6D66BC64389D0603    VM-640600    
6D66B6A0D0E0B8E4    VM-SPACEN  

【问题讨论】:

  • 如何使用铅笔和纸将二进制值转换为十进制?在 python 中复制该过程。
  • @SolarMike 我已经使用 Python 完成了,我只是想在 Python 中复制该公式。就是这样

标签: python-3.x excel pandas excel-formula


【解决方案1】:

作为一个函数:

def customHexConverter(hex_data):
    bin_str = bin(int(hex_data[::-1], 16))[2:].zfill(len(hex_data)*4)
    new_str = ""
    for index in range(1, len(bin_str), 7):
        chunk = bin_str[index : index + 7]
        if int(chunk, 2) > 32:
            new_str = chr(int(chunk, 2)) + new_str
    return new_str

print(customHexConverter("A4C6B4AF48E37AF4"))
print(customHexConverter("A426BC8C48E25A45"))
print(customHexConverter("A426B48F41251BE4"))
print(customHexConverter("6D66BC8C48E25A45"))
print(customHexConverter("6D66BC64389D0603"))
print(customHexConverter("6D66B6A0D0E0B8E4"))

如果您只是处理长二进制字符串(根据 Excel 公式的输入),那么功能等价物可以是:

# reverse hex value
my_hexdata = "4FA73E84FA4B6C4A"
scale = 16 # equal to hexadecimal
bin_str = bin(int(my_hexdata, scale))[2:].zfill(len(my_hexdata)*4)

# convert to output
conversion = "".join(
    list(
        map(
            lambda chunk: chr(int(chunk, 2)) if (int(chunk, 2) > 32) else "", (
                    [bin_str[i:i+7] for i in range(1, len(bin_str), 7)][::-1]
                )
            )
        )
    )
    

两个示例都使用相同的方法。

【讨论】:

    猜你喜欢
    • 2021-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-25
    相关资源
    最近更新 更多