【问题标题】:Reading 2D array from file从文件中读取二维数组
【发布时间】:2021-01-17 16:24:07
【问题描述】:

我正在使用 Python 进行模拟项目,但遇到了问题。我需要将二维数组保存到文件中,以便稍后使用其中的数据。初始列表如下所示:

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("%s\n" % 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。

【问题讨论】:

  • 我正在使用 numpy 所以 int_array3np.array?
  • 这段代码看腻了是哪一个?你只展示你是如何编写文件的。
  • @Countour-Integral 我的错,我编辑了它,所以它被包含在内。

标签: python list file file-writing file-read


【解决方案1】:

您可以尝试使用 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]]

请随时要求澄清

【讨论】:

  • 我是否需要添加任何内容才能使其正常工作?我收到一个错误:消息=列表索引必须是整数或切片,而不是 str 第 54 行,在 l = eval(result[i].split()[0] + ',' + result[i].split ()[1])
  • 你能用整个代码更新你的问题吗?
【解决方案2】:

仅将没有[] 的数字写入文件怎么样?您可以在写入文件期间使用嵌套的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

【讨论】:

  • 似乎 f.write("%d " % num) 不起作用,它说:%d format: a number is required, not list
  • 是的,愚蠢的拼写错误。我的意思是f.write("%d " % n)。关键是使用嵌套的 for 循环来访问嵌套列表中的特定数字。我会立即编辑我的回复。
  • 我在答案中编辑了代码示例,使其更具可读性。
  • 我厌倦了它并将其保存到文件中:14 5 9 3 25 5(应该如此)但是当我尝试打印矢量时它只显示:[25,5]
  • 如果您按字面意思使用我在上面发布的代码,并且您没有在 for 循环中对 vector 变量执行任何操作(即将它推送到另一个列表),那么看起来您只使用上次 for 循环迭代中的 vector 变量。您需要在每次循环迭代时对 vector 变量执行一些操作,否则您将丢失除最后一次迭代之外的所有数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-05
  • 2012-05-30
  • 2023-04-09
  • 1970-01-01
相关资源
最近更新 更多