Python 如何导入相互导入的文件?
如何导入相互导入的函数和字典。这两个文件已经在同一个目录中,因此没有要导入sys的nid。此外,我认为它是递归的,这就是它无法导入的原因。如何从彼此的文件导入词典而不使其递归并导致错误 我确实去了这个网站,但它没有回答我的问题,也没有提供任何示例代码来指导我。因此,我用测试代码创建了这个问题来解释我的问题 假设我有两个文件:boxA和boxR,每个文件都有一个字典keyA和keyR以及名为generatekeyA和generatekeyR的函数 在boxA中:Python 如何导入相互导入的文件?,python,python-3.x,dictionary,recursion,tinydb,Python,Python 3.x,Dictionary,Recursion,Tinydb,如何导入相互导入的函数和字典。这两个文件已经在同一个目录中,因此没有要导入sys的nid。此外,我认为它是递归的,这就是它无法导入的原因。如何从彼此的文件导入词典而不使其递归并导致错误 我确实去了这个网站,但它没有回答我的问题,也没有提供任何示例代码来指导我。因此,我用测试代码创建了这个问题来解释我的问题 假设我有两个文件:boxA和boxR,每个文件都有一个字典keyA和keyR以及名为generatekeyA和generatekeyR的函数 在boxA中: import json from
import json
from tinydb import TinyDB, Query
from boxR import keyR
def generatekeyA():
keyA = {}
serialnoA = 'Serial_noA'
secretidA = 'Secret_idA'
count = 0
while (count <5):
serial = generate key
id = generate id
keyA[serialnoA].append(serial)
keyA[secretidA].append(id)
with open("/home/pi/Desktop/json/output.json", 'w+'):
db = TinyDB('/home/pi/Desktop/json/output1.json')
table = db.table('A KEYS')
db.insert_multiple([{'Serial number A' : keyA[serialnoA]}])
db.insert_multiple([{'Secret id A' : keyA[secretidA]}])
db.insert_multiple([{'Secret id R' : keyR[secretidR]}])
generatekeyA()
def generatekeyA():
from boxR import keyR
do whatever you need to with keyR
keyA = {}
导入json
从tinydb导入tinydb,查询
从boxR导入键
def generatekeyA():
keyA={}
serialnoA='Serial_noA'
secretidA=‘Secret_idA’
计数=0
while(count这是一个循环依赖项。我不知道如何在不改变模块的基本结构和依赖关系图的情况下解决它。为什么不尝试在一个单独的文件中定义这两个dict并导入它们。从代码看,它们都是空的dict
您可能会发现这篇文章很有趣。本质上,当您执行递归依赖时,导入的模块在执行导入语句时会发现彼此都是空模块。因此,此错误显示在boxA中:
import json
from tinydb import TinyDB, Query
from boxR import keyR
def generatekeyA():
keyA = {}
serialnoA = 'Serial_noA'
secretidA = 'Secret_idA'
count = 0
while (count <5):
serial = generate key
id = generate id
keyA[serialnoA].append(serial)
keyA[secretidA].append(id)
with open("/home/pi/Desktop/json/output.json", 'w+'):
db = TinyDB('/home/pi/Desktop/json/output1.json')
table = db.table('A KEYS')
db.insert_multiple([{'Serial number A' : keyA[serialnoA]}])
db.insert_multiple([{'Secret id A' : keyA[secretidA]}])
db.insert_multiple([{'Secret id R' : keyR[secretidR]}])
generatekeyA()
def generatekeyA():
from boxR import keyR
do whatever you need to with keyR
keyA = {}
在boxR中:
import json
from tinydb import TinyDB, Query
from boxA import keyA
def generatekeyR():
keyR = {}
serialnoR = 'Serial_noR'
secretidR = 'Secret_idR'
count = 0
while (count <5):
serialR = generate key
idR = generate id
keyR[serialnoR].append(serialR)
keyR[secretidR].append(idR)
with open("/home/pi/Desktop/json/output2.json", 'w+'):
db = TinyDB('/home/pi/Desktop/json/output2.json')
table = db.table('R KEYS')
db.insert_multiple([{'Serial number R' : keyR[serialnoR]}])
db.insert_multiple([{'Secret id R' : keyR[secretidR]}])
db.insert_multiple([{'Secret id A' : keyA[secretidA]}])
generatekeyA()
def generatekeyR():
from boxA import keyA
do whatever you need to with keyA
keyR = {}
更新
如果您仍然看到该问题,则可能尚未从boxA的全局范围中删除keyR的导入,也未从boxR的全局范围中删除keyA的导入。例如,这可以按预期工作:
################# The file, boxR.py
def generatekeyR():
from boxA import keyA
print 'In generatekeyR'
keyR = {}
################# The file, boxA.py
def generatekeyA():
from boxR import keyR
print 'In generatekeyA'
keyA = {}
################# The file, box.py
#!/usr/bin/env python
import boxR
import boxA
from boxR import generatekeyR
from boxA import generatekeyA
generatekeyR()
generatekeyA()
从bash提示符:
> ./box.py
In generatekeyR
In generatekeyA
我仍在努力弄清楚你的代码的确切形状,这在Python中是至关重要的。将来,更彻底地阅读你的问题并确保格式正确会有帮助
根据我所做的一些假设(最重要的是,添加到数据库中的with
语句发生在while
循环之外),我得出了以下结论。总之,更改如下:
将密钥生成函数更改为返回它们生成的密钥
创建了一个新的Python文件(名为new.py
,但您可以随意调用),用于处理数据库的更新
将生成函数导入到new.py
中,并在那里调用它们,然后使用需要两个键的语句执行
这是我最后得到的代码,希望能有所帮助
boxA.py
def generatekeyA():
keyA = {}
serialnoA = 'Serial_noA'
secretidA = 'Secret_idA'
count = 0
while (count <5):
serial = generate key
id = generate id
keyA[serialnoA].append(serial)
keyA[secretidA].append(id)
# Also need to update count
return keyA
def generatekeyR():
keyR = {}
serialnoR = 'Serial_noR'
secretidR = 'Secret_idR'
count = 0
while (count <5):
serialR = generate key
idR = generate id
keyR[serialnoR].append(serialR)
keyR[secretidR].append(idR)
# Also need to update count
return keyR
import json
from tinydb import TinyDB, Query
from boxA import generatekeyA()
from boxR import generatekeyR()
keyA = generatekeyA()
keyR = generatekeyR()
with open("/home/pi/Desktop/json/output2.json", 'w+'):
db = TinyDB('/home/pi/Desktop/json/output2.json')
table = db.table('R KEYS')
db.insert_multiple([{'Serial number R' : keyR[serialnoR]}])
db.insert_multiple([{'Secret id R' : keyR[secretidR]}])
db.insert_multiple([{'Secret id A' : keyA[secretidA]}])
我不确定这是否可能,因为正在发生的递归。Python假设您需要keyR
来运行boxA
,您需要keyA
来运行boxR
,两者都不能满足对方。看起来像(从这段代码)你并不特别需要这些变量吗?可能是@Jérôme的副本否,上面的链接没有提供示例代码和示例答案供我理解。@ISOmetric但是,我需要在keyA中运行代码,同时从Keyr打印输出,反之亦然。实现这一点的最佳方法是什么?我有点担心le不确定缩进-是否所有内容都是generatekeyA/R()
函数的一部分,或者您定义了一个空函数?因为我认为它无论如何都不会工作,就像那样。嗨!我尝试了执行您上面建议的操作,但没有工作。两个文件无法相互导入词典