利用python解决Origin中十六进制和十进制整数转换的问题
利用python解决Origin中十六进制和十进制整数转换的问题
Origin是由OriginLab公司开发的一个科学绘图、数据分析软件,功能非常强大,可以画出各种漂亮的图像,而且还能进行数理统计/数据分析等,工程狗们爱不释手的工具之一。
但是最近炮哥的一个同事,遇到一个不大但是很膈应的问题,尝试多种办法均没有效解决方案,问题是这样的:
客户提供的数据文件是规则的矩阵形式,但其中1列是十六进制数据,导入Origin软件后是这样的:
上图中第C列中的数据均为十六进制数据,导致很难在Origin中进行数据运算。当然,你可以用C++,JAVA,Python写一段脚本将原始的数据文件中的这列十六进制数据转换为十进制,然后另存一个文件,之后再导入Origin,该干啥干啥……
但是故事到此结束就没意思了!既然Origin最近几年发布的版本中均已经内置了Python,为什么不在Origin软件内部解决该困扰呢?
于是,炮哥写下了7行代码:
import PyOrigin#Line 1
PyOrigin.FindWorksheet('[Book1]数据示例').Columns(2).SetFormat(1)#Line 2
sourcecol = PyOrigin.FindWorksheet('[Book1]数据示例').Columns(2).GetData(0)#Line 3
tarlist=[]#Line 4
for i in range(len(sourcecol)):#Line 5
tarlist.append((int(sourcecol[i],16)))#Line 6
PyOrigin.FindWorksheet('[Book1]数据示例').Columns(3).SetData(tarlist,0)#Line 7
下面逐行解释代码的含义
第一行是导入Origin内置的Python库,后面需要用库中的操作,不用过多解释
第二行是为了将第3列的数据全部设置为文本格式,SetFormat函数的参数为0表示数字,为1表示文本,还有其他参数的含义,详见帮助文件。这行代码的意义随第三行一起解释
第三行是为了读取第3列的全部数据(准确来说是文本),GetData函数包括两个参数(start,end)表示读取的起始行和结束行,此处直接写0,表示读取该列的所有数据。现在回答第二行的含义,如果不将该列数据先设置为文本格式,那么对于python能识别的数字,比如例子中的83、100等被读入后会被识别为float类型,数据变为了83.0、100.0,导致在第六行中转换为十进制时会报错,浮点数不能直接转十六进制的。
第四行新建空的列表,为了后续存储数据用,不解释
第五行和第六行是逐行对十六进制数据转换为十进制,并存储在tarlist列表中,用到了int()函数,该函数的用法为: int(字符串或者数字,进制数) 。
第七行是将tarlist中的数据写入到第4列中,需要注意的是在运行该脚本之前,要在Origin中先插入一列,保证存在第4列,否则达不到目的。
运行这段脚本之后,得到的效果是这样的,没毛病。
(PS:炮哥在持续学习、持续更新中,敬请期待…)
本文地址:https://blog.csdn.net/wangjikun/article/details/107170362