如何将字典的信息从 1 python 文件传输到另一个文件,然后再传输回来?
How do you transfer the information of a dictionary from 1 python file to another and then back?
下面是 运行我正在尝试做的事情。它很长,但我正在尝试尽可能具体。
我正在用 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: '{}'
因为非整数值。
我试图只将一个特定的词典加载到文件中,而不是一次加载所有其他词典。我不能只在 2 个文件中拥有所有确切词典的原因是定义会更改词典中的值。
请注意,我的知识非常有限,主要是通过我自己、像这样的网站和极客对极客的自学。
我希望对我的问题的解释涵盖了我想问的问题。
编辑
就像评论者建议的那样,重写你的攻击函数以接受参数而不是使用全局变量。
# 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 中的函数然后抓取文本文件并读取它。它从文件中获取字典信息,将其加载到自己的字典中,并删除文本文件,使其不占用 space.
函数完成后,它会抓取字典中的新值,创建一个新的文本文件,并将其写入文本文件。然后文件1(因为函数完成)抓取文本文件,读取它,抓取信息并用新信息替换旧词典信息,并删除文本文件。
请注意,据我所知,您需要为每个不同的词典创建文本文件并读取它们。所以我建议使用一个函数来为您需要传输的每本字典执行此操作。
这样做的全部原因是因为我的函数的工作方式,它需要使用多个不同的词典,有时会使用不同数量的词典。
所以对于和我有同样问题的人,按照我的回答去做。但我建议编写函数来接受参数。
下面是 运行我正在尝试做的事情。它很长,但我正在尝试尽可能具体。
我正在用 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: '{}'
因为非整数值。
我试图只将一个特定的词典加载到文件中,而不是一次加载所有其他词典。我不能只在 2 个文件中拥有所有确切词典的原因是定义会更改词典中的值。 请注意,我的知识非常有限,主要是通过我自己、像这样的网站和极客对极客的自学。
我希望对我的问题的解释涵盖了我想问的问题。
编辑
就像评论者建议的那样,重写你的攻击函数以接受参数而不是使用全局变量。
# 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 中的函数然后抓取文本文件并读取它。它从文件中获取字典信息,将其加载到自己的字典中,并删除文本文件,使其不占用 space.
函数完成后,它会抓取字典中的新值,创建一个新的文本文件,并将其写入文本文件。然后文件1(因为函数完成)抓取文本文件,读取它,抓取信息并用新信息替换旧词典信息,并删除文本文件。
请注意,据我所知,您需要为每个不同的词典创建文本文件并读取它们。所以我建议使用一个函数来为您需要传输的每本字典执行此操作。
这样做的全部原因是因为我的函数的工作方式,它需要使用多个不同的词典,有时会使用不同数量的词典。
所以对于和我有同样问题的人,按照我的回答去做。但我建议编写函数来接受参数。