0

我对 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”来优化这一点,但我想知道是否有更有效的做事方式。

谢谢

布莱斯

4

2 回答 2

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]

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

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
于 2013-07-22T13:29:41.717 回答
0

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

于 2013-07-22T13:31:03.420 回答