在另一个Python文件中使用从文件导入的Python字典

10

我遇到了与提问者在《如何从单独的文件中导入或包含数据结构(例如dict)到Python文件中》所问问题相同的问题。但是由于某些原因,我无法使它正常工作。

我的设置如下:

file1.py:

TMP_DATA_FILE = {'a':'val1', 'b':'val2'}

file2.py:

from file1 import TMP_DATA_FILE

var = 'a'
print(TMP_DATA_FILE[var])

当我执行此操作并从命令行运行脚本时,它会显示“字符串索引必须是整数”。
当我执行type(TMP_DATA_FILE)时,返回。我试图将其转换为dict以便使用dict操作,但无法使其工作。
如果我执行print(TMP_DATA_FILE.get(var)),由于我正在使用PyCharm开发,它会列出dict操作(例如get()、keys()、items()、fromkeys()等),但是当我从命令行运行程序时,它会显示“'str' object has no attribute 'get'”。
当我执行print(TMP_DATA_FILE)时,它只列出'val1'。它不列出'a'、'b'、'val2'。
然而,当我从PyCharm运行相同的脚本时,没有任何问题。只有当我从命令行作为单独的解释器进程运行脚本时,它才会出现这些错误。
我不确定是PyCharm导致错误还是我做错了什么。
最初,dict变量中只有一个键值对,它可以正常工作,但当我添加新的键值对时,就开始出现这些错误了。
我还尝试使用ast.literal_evaleval,但都没有起作用。不确定我哪里做错了。
非常感谢您的帮助。

忘了提一下 - file1.py和file2.py在不同的文件夹中,我两个文件夹中都有__init__.py。我也尝试过从一些帖子中读取json选项,但那些方法也没有起作用。 - Murali
我已经编辑了我的问题,更改了导入语句。这是我目前使用的导入样式,我在提问时忘记提到了。对于任何混淆造成的困扰,我感到抱歉。 - Murali
检查一下我的答案,也许会有帮助。 - Bharadwaj
感谢mescalinum的提示。那确实是问题所在。我没有在PYTHONPATH中设置正确的文件夹。现在它可以工作了。感谢大家的建议。 - Murali
4个回答

11

您可以通过两种方式来访问file1.py文件中的变量TMP_DATA_FILE

import file1
var = 'a'
print(file1.TMP_DATA_FILE[var])
或者:
from file1 import TMP_DATA_FILE
var = 'a'
print(TMP_DATA_FILE[var])

file1.py应该位于Python搜索路径包含的目录中,或者与导入它的文件在同一个目录中。

请查看有关Python搜索路径的此答案。


它们可能在子目录中而不是同一个目录中,我已经测试过了。 - BarzanHayati

2
如果您在项目中创建了“package”,则必须从主项目中链接文件。
例如: 如果您有一个名为“Z”的文件夹,其中包含2个文件夹“A”和“B”,并且这两个文件“file1.py”和“file2.py”存在于“A”和“B”文件夹中,则必须以以下方式导入它。
import Z.A.file1
print(file1.TMP_DATA_FILE)

1
你的调用方式不正确。应该像这样:
print file1.TMP_DATA_FILE[var]

我也尝试过这种方法,这是我的原始代码。但它没有起作用。我应该修改问题以反映最新的代码,其中我正在执行from file1 import dictVariable,这就是为什么我有dictVariable[var] - Murali

1

正确的变体:

import file1    
var = 'a'
print(file1.TMP_DATA_FILE[var])

or

from file1 import TMP_DATA_FILE
var = 'a'
print(TMP_DATA_FILE[var])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接