【发布时间】:2021-02-15 13:41:40
【问题描述】:
我需要帮助才能从 csv 文件写入和恢复数据。
我的参数game 是一个包含 2 个元素的元组。这是一个例子:
(((4, 0), (4, 1), (4, 2), (4, 3)), [[0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0]])
我需要两个功能,一个是保存游戏,另一个是恢复游戏。这就是我目前所拥有的:
保存游戏:
def save_game(game):
with open ('file.csv', 'w') as f:
csv_file = csv.writer(f)
csv_file.writerow(game)
恢复游戏:
def recover_game():
with open ('file.csv', 'r') as f:
csv_file = csv.reader(f)
for line in csv_file:
game = line[0], line[1]
return game
但是,在恢复游戏时,我得到了这样的结果:
('((4, 0), (4, 1), (4, 2), (4, 3))', '[[0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0]]')
有什么办法可以去掉引号,这样我就可以得到一个类似的元组,就像传递给我的 game 参数的元组一样?
谢谢。
【问题讨论】:
-
模块
csv在编写之前将所有非字符串(例如元组)转换为字符串表示形式。但是你想存储元组,而不是字符串表示。因此,CSV 不是持久化数据的最佳选择。看看pickle模块。 -
您希望您的数据是什么样的CSV 文件?它看起来与您的原始元组不完全一样,但如果您希望每个元组与文件中的一行相对应(例如),这是可行的。
-
只有一行是没有意义的。每个元组一行是更好的选择。
-
但是如果我想用 CSV 模块来做,可以吗?