首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将字典的信息从一个python文件传输到另一个,然后再返回?

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

Stack Overflow用户
提问于 2022-01-23 01:48:32
回答 2查看 145关注 0票数 0

下面是我想要做的事情的简况。这是很长的,但我正试图尽可能具体。

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

主文件。当我运行主文件时,它可以很好地获取定义。但是姐妹文件吐出了一个错误,它无法在代码中读取所需的字典。所以我试着把字典从主文件复制到姐妹文件。它可以工作,但是由于字典中的所有数据都不是从一个文件传输到另一个文件,所以我尝试了这一点。

档案1:

代码语言:javascript
复制
import os,sys,ast
from file2 import *
player = {'name' : 'player',
          'hp' : 10}
enemy = {'name' : 'enemy2',
          'damage' : 5}
attack()

档案2:

代码语言:javascript
复制
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']

我一直在犯这个错误:

代码语言:javascript
复制
TypeError: argument should be integer or None, not 'dict'

但是,当我试图将它转换为整数时:

档案2:

代码语言:javascript
复制
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']

我得到:

代码语言:javascript
复制
ValueError: invalid literal for int() with base 10: '{}'

因为非整数值。

我试图只将一个特定的字典加载到文件中,而不是同时加载其他所有的字典。我不能仅仅在这两个文件中拥有所有精确的字典,原因是定义改变了字典中的值。请注意,我的知识非常有限,大部分是通过自己自学的,像这样的网站和极客的极客。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-01-23 02:16:59

编辑

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

代码语言:javascript
复制
# File 2
def attack(player, enemy):
    player['hp'] = player['hp'] - enemy['damage']

# File 1
…
attack(player, enemy)
票数 0
EN

Stack Overflow用户

发布于 2022-01-24 03:33:21

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

您要做的事情(同时仍然使用globals)是将特定的字典加载到文本文件中:

file1:

代码语言:javascript
复制
    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")

file2:

代码语言:javascript
复制
    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中,它获取“字典”中的每个值,创建一个新的文本文件,并将其写入文本文件。然后调用文件2中的函数。

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

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

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

之所以出现这种情况,是因为我的函数的工作方式需要使用多个不同的字典,有时还需要使用不同数量的字典。

因此,对于任何和我有同样问题的人,都要做我的回答。但我建议编写函数来接受论点。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70818564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档