所以就像标题说我开始学习一些python并且我很难接受这种技术。我需要做的是读取一些数字并将它们存储在列表中。文本文件如下所示:
0 0 3 50
50 100 4 20
基本上这些是用于制作形状的python龟的坐标和方向。我得到了那个部分唯一的问题是让它们以正确的格式。所以我无法弄清楚如何将文件中的这些数字转换为[ [0, 0, 3, 50], [50, 100, 4, 20] ]
一个列表,每个四个坐标都是一个大列表中的列表。
继承我的尝试,但正如我所说,我需要一些帮助 - 谢谢。
polyShape=[]
infile = open(name,"r")
num = int(infile.readline(2))
while num != "":
polyShape.append(num)
num = int(infile.readline(2))
infile.close()
答案 0 :(得分:12)
with open('data.txt') as f:
polyShape = []
for line in f:
line = line.split() # to deal with blank
if line: # lines (ie skip them)
line = [int(i) for i in line]
polyShape.append(line)
会给你
[[0, 0, 3, 50], [50, 100, 4, 20]]
这适用于包含空白行(或不包含空行)的文件。
使用with
构造将在您完成后自动关闭文件,或者遇到异常。
答案 1 :(得分:3)
假设输入文件中实际上没有空行:
with open(name, "r") as infile:
polyShape = [map(int, line.split()) for line in infile]
说明:map(int, line.split())
拆分每个line
并将每个部分转换为int
。 [X for Y in Z]
构造是一个列表推导,它依次将map
映射到文件的所有行,并将其结果返回到列表中。
如果你现在觉得这太复杂了,那么map(int, line.split())
就是主要的回家消息。
答案 2 :(得分:2)
with open('data.txt') as f:
lis=[map(int,x.split()) for x in f if x.strip()] # if x.strip() to skip blank lines
#use list(map(int,x.split())) in case of python 3.x
这就是map()
的工作原理:
>>> map(int,'1 2 3 4'.split())
[1, 2, 3, 4]
答案 3 :(得分:1)
迭代文件将是最简单的方法:
poly_shape = []
with open(name, 'r') as handle:
for line in handle:
if not line.strip():
continue # This skips blank lines
values = map(int, line.split())
poly_shape.append(values)
答案 4 :(得分:1)
一衬垫:
[ [int(x) for x in line.split(' ')] for line in open(name,'r').readlines() if line.strip()]
但readlines
部分可能不是一个好主意。
我非常确定[int(x) for x in ... ]
比使用map
更快,就像在其他建议的解决方案中一样。
修改强>
感谢Blender:不需要.readlines
,这很酷,所以我们只有:
[ map(int, line.split()) for line in open(name,'r') if line.strip()]
我还使用了map(int, )
,因为它实际上更快,而且您只能使用line.split()
代替line.split(' ')
。
答案 5 :(得分:0)
我不建议将append
用于大数组。它比创建零数组并为其分配值慢50倍。
import numpy
fname = "D:\Test.txt";
num_lines = sum(1 for line in open(fname));
array = numpy.zeros((num_lines,4));
k = 0;
with open(fname, "r") as ins:
for line in ins:
a =[int(i) for i in line.split(' ')];;
array[k,0:4] =a;
k = k+1;
print(array)