如何从文本文件中制作二维数组?

时间:2012-10-07 14:30:45

标签: python arrays text 2d

  

可能重复:
  How can i make a 2D array with existing lists?

我有一个文本文件'mapview.txt',其内容是:

1234
5678
9012

我希望结果为:

[[1,2,3,4],[5,6,7,8],[9,0,1,2,]]

我不希望如:

[['1','2','3','4'],['5','6','7','8'],['9','0','1','2']]

我有这样的代码:

getit = open('./mapview.txt')
readit = getit.read()

itsline = readit.split()
line0 = list(itsline[0])
line1 = list(itsline[1])
line2 = list(itsline[2])

final = [line0,line1,line2]

print final

但结果是

[['1','2','3','4'],['5','6','7','8'],['9','0','1','2']]

我怎么才能得到

[[1,2,3,4],[5,6,7,8],[9,0,1,2,]]

?我需要那个表单,因为我将使用数组中的整数。

有什么建议吗?任何帮助都会很棒。

提前致谢!

3 个答案:

答案 0 :(得分:2)

您可以将列表中的所有字符串更改为整数:

map(int, lst)

map函数将函数应用于列表的每个项目,int函数将字符串转换为列表。在您的情况下,您需要更改列表中的所有字符串,因此您需要类似

的内容
[map(int, lst) for lst in final]

有关您的代码的另一个注意事项是

line0 = list(itsline[0])
line1 = list(itsline[1])
line2 = list(itsline[2])

不是一个好主意 - 它只适用于文件中正好有3行。这也可以通过以下方式改进:

final = map(list, itsline)

答案 1 :(得分:2)

要修改您的解决方案,请更改

line0 = list(itsline[0])
line1 = list(itsline[1])
line2 = list(itsline[2])

line0 = [int(i) for i in itsline[0]]
line1 = [int(i) for i in itsline[1]]
line2 = [int(i) for i in itsline[2]]

但是这个列表理解会更有效率:

[[int(i) for i in line.strip()] for line in open('file/path')]

答案 2 :(得分:2)

with open('./mapview.txt') as file:
     array2d = [[int(digit) for digit in line.strip()] for line in file]

print(array2d)

Output

[[1, 2, 3, 4], [5, 6, 7, 8], [9, 0, 1, 2]]