我是python的新手,还没有阅读所有文档,我有一个包含x,y值的文件,我想将所有这些x,y值除以1000或移动十进制的3位数字。文件样本:
TP_NET 537.534 768.500 MFO2_CAN1TX_EVENT1 TOP
TP_NET 518.000 815.500 MFO1_CAN1RX TOP
TP_NET 416.000 829.500 CON_SPI1_MISO BOTTOM
我希望输出文件是
TP_NET .537534 .768500 MFO2_CAN1TX_EVENT1 TOP
TP_NET .518000 .815500 MFO1_CAN1RX TOP
TP_NET .416000 .829500 CON_SPI1_MISO BOTTOM
我可以使用Excel轻松完成此操作,但是我正在学习python。所以,这是我写的,到处都有错误。
import re
import numpy as np
num = 1000
with open('tp') as f, open('tp_mils','w') as f1:
list = re.findall('\d*?\.\d+', f.readline())
new_list = np.divide(list, num)
f1.writelines(new_list)
这是失败:
Traceback (most recent call last):
File "float.py", line 6, in <module>
new_list = np.divide(list, num)
TypeError: ufunc 'true_divide' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
您忽略了将找到的字段转换为float
。从问题空间中删除文件输入后,我用简单的print
跟踪了问题。输入的每一行产生两个输出:Python list
和结果numpy
数组。
注意:像使用list
一样,对带有局部变量的内置类型进行“阴影”处理。import re
import numpy as np
num = 1000
infile = [
"TP_NET 537.534 768.500 MFO2_CAN1TX_EVENT1 TOP",
"TP_NET 518.000 815.500 MFO1_CAN1RX TOP",
"TP_NET 416.000 829.500 CON_SPI1_MISO BOTTOM",
]
for line in infile:
nums = [float(x) for x in re.findall('\d*?\.\d+', line)]
print(nums)
new_list = np.divide(nums, num)
print(new_list)
输出:
[537.534, 768.5]
[0.537534 0.7685 ]
[518.0, 815.5]
[0.518 0.8155]
[416.0, 829.5]
[0.416 0.8295]
re
或numpy
模块来使事情复杂化: