读取不同数量的列,忽略Python中的特定元素

时间:2013-07-22 13:27:55

标签: python text multiple-columns

我对Python很陌生,所以请原谅我对此事的有限知识。

我的任务是从以下文本文件中读取每一行:

4   4738    6208    13891   14714
5   848 1184    3227    6539    7139
5   2748    8697    14917   15168   15751 
3   3568    10845   15435
4   5136    5460    12082   15854
4   3431    4571    10360   12118
0
3   1202    8022    13163
4   2510    2603    7023    8035
3   4886    7131    8428
5   1090    1091    2613    6863    14302  
3   7747    9374    11169
4   1360    2356    5122    11091

但是,我想忽略每一行的第一个元素(即所有那些4s,5s,0和3s)并读取其余部分,将数字存储到数组中。

我尝试使用函数numpy.loadtxt,numpy.genfromtxt,但是列数变化的事实似乎存在问题。我试着通过读取10列并在没有数字的情况下插入“N”来优化它,但我想知道是否有更有效的处理方式。

由于

布莱斯

2 个答案:

答案 0 :(得分:2)

这应该在int s

列表的锯齿状2D列表中为您提供所有数字(第一列除外)
with open('path/to/file') as infile:
    allNums = [[int(num) for num in line.strip().split()[1:]] for line in infile]

如果您想将其转换为int s列表的非锯齿状列表,则:

import itertools
with open('path/to/file') as infile:
    allNums = [[int(num) for num in line.strip().split()[1:]] for line in infile]
nullValue = None
allNums = list(itertools.izip.from_iterable(allNums, fillvalue=None)) # python 2.x
# allNums = list(itertools.zip.from_iterable(allNums, fillvalue=None)) # python 3.x

答案 1 :(得分:0)

读取整行,然后根据空白进行拆分。它应返回每行的正确大小列表。你将不得不忽略第一个元素。