我和OP在How to import or include data structures (e.g. a dict) into a Python file from a separate file中提出的问题相同。但由于某种原因,我无法让它发挥作用。
我的设置如下:
file1.py:
TMP_DATA_FILE = {'a':'val1', 'b':'val2'}
file2.py:
from file1 import TMP_DATA_FILE
var = 'a'
print(TMP_DATA_FILE[var])
当我这样做并从cmd行运行脚本时,它表示字符串索引必须是整数。
当我type(TMP_DATA_FILE)
时,我会上课' str'。我试图将其转换为dict以便能够使用dict操作,但无法使其正常工作。
如果我print(TMP_DATA_FILE.get(var))
,因为我正在使用PyCharm进行开发,它会列出dict操作,如get(),keys(),items(),fromkeys()等,但是当我运行程序时从命令行它说' str'对象没有属性' get'。
当我print(TMP_DATA_FILE)
时,它只会列出' val1'。它没有列出' a'''''' val2'
然而,从PyCharm运行时相同的脚本没有任何问题。只是当我从命令行运行脚本作为单独的解释器进程时,它会给出这些错误。
我不确定PyCharm是否会导致错误,或者我是否做错了。
最初我只有一个键:dict变量中的值,当我添加了新的key:value对,当它开始提供这些错误时,它就起作用了。
我也试过使用ast.literal_eval
& eval
,他们都没有工作。不知道我哪里出错了。
任何帮助都将受到高度赞赏。
感谢。
答案 0 :(得分:4)
您可以通过两种方式访问文件TMP_DATA_FILE
中的变量file1.py
:
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搜索路径中包含的目录中,或者与导入它的文件位于同一目录中。
检查this answer有关python搜索路径的信息。
答案 1 :(得分:2)
如果您在项目中创建了package
,那么您必须链接主项目中的文件。
例如:
如果您的文件夹Z
包含2个文件夹A
和B
,那么file1.py
和file2.py
和A
中存在{2}个文件{1}}文件夹,然后你必须以这种方式导入
B
答案 2 :(得分:1)
你称之为错误的方式。它应该是这样的:
print file1.TMP_DATA_FILE[var]
答案 3 :(得分:1)
正确的变体:
import file1
var = 'a'
print(file1.TMP_DATA_FILE[var])
或
from file1 import TMP_DATA_FILE
var = 'a'
print(TMP_DATA_FILE[var])