我有一个文本文件,其中包含3列有用数据,我希望能够使用numpy在python中提取这些数据。文件类型为* .nc, NOT 为netCDF4文件类型。它是CNC机床的标准文件输出类型。在我的例子中,它是一种CMM(坐标测量机)。格式如下:
X0.8523542Y0.0000000Z0.5312869
X,Y和Z是机器上的坐标轴。我的问题是,我可以用多个分隔符分隔数组吗?在这种情况下:" X"," Y"和" Z"。
答案 0 :(得分:1)
您可以使用Pandas
import pandas as pd
from io import StringIO
#Create a mock file
ncfile = StringIO("""X0.8523542Y0.0000000Z0.5312869
X0.7523542Y1.0000000Z0.5312869
X0.6523542Y2.0000000Z0.5312869
X0.5523542Y3.0000000Z0.5312869""")
df = pd.read_csv(ncfile,header=None)
#Use regex with split to define delimiters as X, Y, Z.
df_out = df[0].str.split(r'X|Y|Z', expand=True)
df_out.set_axis(['index','X','Y','Z'], axis=1, inplace=False)
输出:
index X Y Z
0 0.8523542 0.0000000 0.5312869
1 0.7523542 1.0000000 0.5312869
2 0.6523542 2.0000000 0.5312869
3 0.5523542 3.0000000 0.5312869
答案 1 :(得分:0)
我最终使用了Scott提供的Pandas解决方案。由于某种原因,我不是100%明确,我不能简单地将数组从字符串转换为浮点数与浮点数(数组)。我创建了一个大小相等的数组,并迭代了数组的大小,将每个单独的元素转换为float并将其保存到另一个数组。
全部谢谢
答案 2 :(得分:0)
使用我在评论中建议的过滤功能:
字符串示例(替代文件):
In [1]: txt = '''X0.8523542Y0.0000000Z0.5312869
...: X0.8523542Y0.0000000Z0.5312869
...: X0.8523542Y0.0000000Z0.5312869
...: X0.8523542Y0.0000000Z0.5312869'''
基本genfromtxt使用 - 获取字符串:
In [3]: np.genfromtxt(txt.splitlines(), dtype=None,encoding=None)
Out[3]:
array(['X0.8523542Y0.0000000Z0.5312869', 'X0.8523542Y0.0000000Z0.5312869',
'X0.8523542Y0.0000000Z0.5312869', 'X0.8523542Y0.0000000Z0.5312869'],
dtype='<U30')
这个字符串数组可以与pandas
答案一样精神分割。
定义一个函数来替换一行中的分隔符:
In [6]: def foo(aline):
...: return aline.replace('X','').replace('Y',',').replace('Z',',')
re
可用于更漂亮的拆分。
测试它:
In [7]: foo('X0.8523542Y0.0000000Z0.5312869')
Out[7]: '0.8523542,0.0000000,0.5312869'
在genfromtxt
:
In [9]: np.genfromtxt((foo(aline) for aline in txt.splitlines()), dtype=float,delimiter=',')
Out[9]:
array([[0.8523542, 0. , 0.5312869],
[0.8523542, 0. , 0.5312869],
[0.8523542, 0. , 0.5312869],
[0.8523542, 0. , 0.5312869]])
使用文件,生成器会像:
(foo(aline) for aline in open(afile))