我正在用Python做一个模拟项目,遇到了一个问题。我需要将2D数组保存到文件中,以便以后使用其中的数据。初始列表如下所示:
int_array3 = [[14,5], [9,3], [25,5]]
#writing to file:
with open('data.txt', 'w') as f:
for num in int_array3:
f.write("%sn" % num)
文件中的数据如下所示:
[14 5]
[9 3]
[25 6]
我读了这段代码,但它不是一个整数列表。
with open('data.txt', 'r') as f:
result = f.readlines()
result = [x.strip() for x in result]
结果列表如下所示:
['[14 5]', '[9 3]', '[25 6]']
有谁能给我推荐一下如何使用它吗?我希望结果列表的形状与我最初的列表相同。我用的是numpy
您可以尝试使用eval()将字符串转换为数组,如下所示:
A = ['[14 5]', '[9 3]', '[25 6]']
arr = []
for i in range(len(A)):
l = eval(A[i].split()[0] + ',' + A[i].split()[1])
arr.append(l)
print(A)
# [[14, 5], [9, 3], [25, 6]]
请随时要求澄清
只写没有[]
的数字到文件怎么样?您可以在写入文件期间使用嵌套的for
循环来实现这一点。只是要记住数字之间要分开(例如用空格)。然后,你可以逐行读取你的文件,使用split()
,然后你会得到一个数字数组,但现在它是一个字符串数组。要从中生成数字,需要将字符串数字强制转换为int。我认为最简单的方法是使用列表推导来构建新的数字列表。
int_array3 = [[14,5], [9,3], [25,5]]
#writing to file:
with open('data.txt', 'w') as f:
for vec in int_array3:
for number in vec:
f.write("%d " % number)
f.write("n")
你可以用:
with open('data.txt', 'r') as f:
for line in f:
vector = [int(x) for x in line.split()]
#Do something with vector variable