如何将字典的信息从一个python文件传输到另一个文件,然后再传输回来



下面是我要做的事情的概要。它很长,但我尽可能具体。

我正在用python做一个文本冒险游戏。问题是文件太大了,我需要为不同的定义创建姐妹文件,因为编辑开始变得迟缓。

用于主文件。当我运行主文件时,它可以很好地获取定义。但是姐妹文件抛出了一个错误,即它无法读取代码中所需的字典。所以我试着把字典从主文件复制到姊妹文件。它是有效的,但由于字典中所有内容的统计数据不会从一个文件传输到另一个文件,所以我尝试了这个。

文件1:

import os,sys,ast
from file2 import *
player = {'name' : 'player',
'hp' : 10}
enemy = {'name' : 'enemy2',
'damage' : 5}
attack()

文件2:

import os,sys,ast
player = {'name' : 'player',
'hp' : 10}
enemy = {'name' : 'enemy2',
'damage' : 5}
with open("file1.py") as f:
data = f.read(player)
dictionary = ast.literal_eval(data)
def attack():
player['hp'] = player['hp'] - enemy['damage']

我一直收到这个错误:

TypeError: argument should be integer or None, not 'dict'

但当我试图将其转换为整数时:

文件2:

import os,sys,ast
enemy1 = {'name' : enemy1,
'damage' : 10}
enemy2 = {'name' : enemy2,
'damage' : 5}
with open('file.py') as f:
data = f.read(int(str(player)))
dictionary = ast.literal_eval(data)
def attack():
player['hp'] = player['hp'] - enemy['damage']

我得到:

ValueError: invalid literal for int() with base 10: '{}'

因为是非整数值。

我试图只将一个特定的字典加载到文件中,而不是一次加载所有其他字典。我不能在这两个文件中拥有所有精确的字典的原因是定义会更改字典中的值。请注意,我的知识非常有限,主要是通过自己、像这样的网站和极客来自学。

我希望对我问题的解释能涵盖我想问的问题。

编辑

就像评论者建议的那样,重写攻击函数以接受参数,而不是使用全局变量。

# File 2
def attack(player, enemy):
player['hp'] = player['hp'] - enemy['damage']
# File 1
…
attack(player, enemy)

所以我终于找到了问题的答案。

您要做的(同时仍然使用全局变量(是将特定的字典加载到一个文本文件中:

文件1:

import os,sys,ast
dictionary = {...}
from file2 import function
filehandler = open("file.txt", "a")
data = str(dictionary)
filehandler.write(data)
filehandler.close()

function()

with open('file.txt') as f:
data = f.read()
dictionary = ast.literal_eval(data)
os.remove("file.txt")

文件2:

import sys,os,ast

dictionary = {...}
def function():
with open('file.txt') as f:
data = f.read()
dictionary = ast.literal_eval(data)
os.remove("file.txt")
...
filehandler = open("file.txt", "a")
data = str(dictionary)
filehandler.write(data)
filehandler.close()

以下是对发生的事情的解释。

在文件1中,它从"dictionary"中获取每个值,创建一个新的文本文件,并将其写入文本文件。然后它调用文件2中的函数。

然后,file2中的函数获取文本文件并读取它。它从文件中获取字典信息,将其加载到自己的字典中,并删除文本文件,这样它就不会占用空间。

函数完成后,它获取字典中的新值,创建一个新的文本文件,并将其写入文本文件。然后文件1(由于该功能已经完成(获取文本文件,读取它,获取信息并用新信息替换旧的字典信息,并删除文本文件。

请注意,据我所知,您需要创建文本文件并为每个不同的字典读取它们。因此,我建议对每一个需要转移的字典使用一个函数。

这样做的全部原因是因为我的函数的工作方式,它需要使用多个不同的字典,有时还会使用不同数量的字典。

所以,对于任何和我有同样问题的人,按照我的答案去做。但我建议编写函数来接受论点。

最新更新