如何从文件中填充2D数组

时间:2015-11-20 23:03:06

标签: python arrays multidimensional-array

我有一个文件,每行有一个参数:

a1
b1
c1
a2
b2
c2
...

参数是字符行(不是数字)

我需要将其加载到2D数组以进行进一步的操作。 到目前为止,我设法将此文件上传到1D数组:

ParametersRaw = []
with open(file1) as fh:
    ParametersRaw = fh.readlines()
fh.close()

NumberOfColumns = 7
NumberOfRows = len(ParametersRaw)/NumberOfColumns

Parameters = [[],[]]
i=0
j=0
k=0
while (i < NumberOfRows):
    while (j < NumberOfColumns):
        k = (i*NumberOfColumns)+j
        Parameters[i][j] = ParametersRaw[k]
        j = j + 1
    i = i + 1
    j = 0

它在Parameters[i][j] = ParametersRaw[k]行失败,错误:

  

IndexError:索引0超出轴0,大小为0

如果填充1D数组,我会使用append()方法。 但是在2D的情况下,我失去了如何应用append()。

列昂尼德

4 个答案:

答案 0 :(得分:0)

我不知道这是否能解答您的问题,但如果您从

开始
parameters = [[''], ['']]

然后

parameters[0][0]

''

您拥有的内容Parameters = [[],[]]是一个包含两个空列表的列表。由于这些列表是空的,因此您无法将其编入索引。

答案 1 :(得分:0)

你仍然可以使用追加,但你必须首先为每个值启动空列表。

 viewPager.setAdapter(new CustomFragmentPagerAdapter(getChildFragmentManager()));

然后,您可以在每个项目上调用>>> NumberOfRows = 5 >>> [[] for __ in range(NumberOfRows)] [[], [], [], [], []]

append

请注意parameters = [[] for __ in range(NumberOfRows)] for i in range(0,NumberOfRows,NumberOfColumns): for j in range(NumberOfColumns): k = i+j Parameters[i//NumberOfColumns].append(ParametersRaw[k]) 的使用,与range(0,NumberOfRows,NumberOfColumns):

之前的i+=NumberOfColumns重复相同

我希望这可以按你想要的方式工作!我无法测试它,因为我没有你的任何数据所以只要评论是否有错误:)

答案 2 :(得分:0)

谢谢大家。这是最后一段代码,它给我带来了很多麻烦,但现在以我想要的方式工作:

UNIQUE

CU

答案 3 :(得分:0)

如果参数列表的大小是numCols的倍数,那么你可以使用numpy在几行代码中完成。

import numpy as np
parameters = np.loadtxt("./filename.txt", unpack=True, dtype=str)
numCols = 7
numRows = len(parameters) / numCols
parameters = np.reshape(parameters, (numRows, numCols))