如何控制genfromtxt只读取指定的行?

3

genfromtxt可以跳过头部和尾部行,并指定要使用哪些列。 但是我如何控制读取的行数呢?

有时,一个文本文件可能包含多个不同形状的块。 例如:

a=StringIO('''
1,2,3
1,2,3
2,3
2,3
''')
genfromtxt(a,delimiter=',',skip_header=1)

这将引发一个错误,

ValueError: Some errors were detected !
    Line #4 (got 2 columns instead of 3)
    Line #5 (got 2 columns instead of 3)

当然,我可以这样做:
a=StringIO('''
1,2,3
1,2,3
2,3
2,3
''')
genfromtxt(a,delimiter=',',skip_header=1,skip_footer=2)

这段代码非常丑陋,因为我需要计算区块下面的行数。

但我希望有一些类似于

genfromtxt(a,delimiter=',',skip_header=1,nrows=2)

有没有更好的想法?或者使用其他函数?


2015年10月更新

这个问题已经在新版本的Numpy中得到了解决。

genfromtxt现在有一个名为max_rows的新关键字,允许控制要读取的行数,参见此处


fromfile 提供了一个关键字 count 来控制读取的项目数量。然而,与 genfromtxtloadtxt 读取文本文件时相比,fromfile 的灵活性较差。 - Syrtis Major
1个回答

2
您可以使用invalid_raise = False来跳过缺少某些数据的行。例如:
b = np.genfromtxt(a, delimiter=',', invalid_raise=False)

这将会给你一个警告,但不会引发异常。

1
如果你想要过滤掉那个警告,你可以添加这行代码:`import warnings` `warnings.simplefilter("ignore",UserWarning)` - Syrtis Major

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接