如何将字典的信息从 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(因为函数完成)抓取文本文件,读取它,抓取信息并用新信息替换旧词典信息,并删除文本文件。

请注意,据我所知,您需要为每个不同的词典创建文本文件并读取它们。所以我建议使用一个函数来为您需要传输的每本字典执行此操作。

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

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