Python 在numpy中导入非方形表

Python 在numpy中导入非方形表,python,file-io,python-3.x,numpy,Python,File Io,Python 3.x,Numpy,使用python3.3中的numpy,可以使用genfromtxt导入非方表吗?我想从如下所示的文件中读取: 头衔 2.1 -0.6634-0.3830-0.0000摄氏度 0.6634 0.3830-0.0000卢比 1 2 1 1 其中每行以\n结尾。显然这张桌子不是正方形的。我没有成功使用loadtxt或genfromtxt。他们都想要方桌。以下是示例及其结果: >>> with open('propane.ct','r') as f: txt = f.re

使用
python3.3
中的
numpy
,可以使用
genfromtxt
导入非方表吗?我想从如下所示的文件中读取:

头衔

2.1

-0.6634-0.3830-0.0000摄氏度

0.6634 0.3830-0.0000卢比

1 2 1 1

其中每行以
\n
结尾。显然这张桌子不是正方形的。我没有成功使用
loadtxt
genfromtxt
。他们都想要方桌。以下是示例及其结果:

>>> with open('propane.ct','r') as f:
       txt = f.read()
       data = np.genfromtxt(io.BytesIO(txt.encode()), delimiter='\n', dtype=None)

[b'propane.ct' b'3 2' b'-1.3268   ' b'0.0000    ' b'1.3268   -' b'1 2  1  1'
 b'2 3  1  1']

>>np.genfromtxt('proporate.ct')
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
genfromtxt中的文件“/opt/local/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site packages/numpy/lib/npyio.py”,第1638行
提升值错误(errmsg)
ValueError:检测到一些错误!
第2行(由1列改为2列)
第3行(由1列改为4列)
第4行(由1列改为4列)
第5行(由1列改为4列)
第6行(由1列改为4列)
第7行(由1列改为4列)
这些文件是由专有软件生成的,因此我无法在初始文件创建过程中调整表格。我曾想过向每一行添加列以使其成为正方形,但这可能比使用
numpy
内置程序效率低


是否有什么地方我做错了,或者我必须编写自己的解析器?

您可以使用
np.genfromtxt
设置参数
skip\u header
,例如:

np.genfromtxt('my_file.csv', skip_header=4, dtype=str)
#array([['-0.6634', '-0.3830', '-0.0000', 'C'],
#       ['0.6634', '0.3830', '-0.0000', 'R'],
#       ['1', '2', '1', '1']],
#      dtype='|S7')

问题不在于导入文件,而在于您正试图将其存储为numpy数组,这要求每个维度(“正方形”)的大小一致。你能做的最好的事情就是列出一个列表,或者使用另一个包。实际上,如果我能从EOF跳到某一行,这可能非常有用。要跳过的行数肯定会改变。我刚才发现可以通过
np.genfromtxt(itertools.islice(文件,2),skip_header=1)
来完成。
>>> np.genfromtxt('propane.ct')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/site-packages/numpy/lib/npyio.py", line 1638, in genfromtxt
    raise ValueError(errmsg)
ValueError: Some errors were detected !
    Line #2 (got 2 columns instead of 1)
    Line #3 (got 4 columns instead of 1)
    Line #4 (got 4 columns instead of 1)
    Line #5 (got 4 columns instead of 1)
    Line #6 (got 4 columns instead of 1)
    Line #7 (got 4 columns instead of 1)
np.genfromtxt('my_file.csv', skip_header=4, dtype=str)
#array([['-0.6634', '-0.3830', '-0.0000', 'C'],
#       ['0.6634', '0.3830', '-0.0000', 'R'],
#       ['1', '2', '1', '1']],
#      dtype='|S7')