2015-06-17 48 views
2

我有同样的问题,因为在How to import or include data structures (e.g. a dict) into a Python file from a separate file要求由OP。但由于某种原因,我无法使它工作。使用Python字典从文件导入在另一个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]) 

当我这样做并运行CMD行脚本,它说字符串索引必须是整数。

当我做type(TMP_DATA_FILE),我得到一流的 'STR'。我试图将其转换为字典,以便能够使用字典操作,但无法使其工作。

如果我做print(TMP_DATA_FILE.get(var)),因为我正在开发使用PyCharm,它列出了像get(),keys(),items(),fromkeys()等操作,但是当我从命令行运行程序时, 'str'对象没有'get'属性。

当我做print(TMP_DATA_FILE)它只是列出了 'VAL1'。它没有列出'a','b','val2'。

但是,从PyCharm运行时的相同脚本没有任何问题。只是当我从命令行运行脚本作为单独的解释器进程时,它会给出这些错误。

我不知道这是否是PyCharm这是造成错误或者如果我做错了什么。

我原本只需一键:在字典变量值和它的工作,当我添加了新的关键字:值对,当它开始给这些错误的。

我也试过使用ast.literal_eval & eval,他们都没有工作。不知道我哪里错了。

任何帮助将不胜感激。

谢谢。

+0

忘了提及 - file1.py&file2.py在不同的文件夹中,我在两个文件夹中都有'__init __。py'。我也尝试从一些帖子阅读json选项,那些也没有工作。 – Murali

+0

我编辑了我的问题以更改导入语句。这是我在提问时忘记提及的当前进口样式。对不起,有任何困惑。 – Murali

+0

检查我的答案一次,可能会有所帮助 – Bharadwaj

回答

3

有两种方法,你可以在文件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的搜索路径的目录,或者在相同的目录文件导入。

检查this answer关于python搜索路径。

1

你说这是错误的方式。它应该是这样的:

print file1.TMP_DATA_FILE[var] 
+0

我试过这种方法,这是我的原始代码。它没有工作。我应该修改这个问题,以反映我正在从'file1 import dictVariable'执行''的最新代码,这就是为什么我有'dictVariable [var]' – Murali

+0

你应该提到文件目录之前...... –

1

正确的变体:

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

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

如果在项目中创建了package,则必须链接主项目中的文件。

例如:
如果你有一个文件夹Z其中包含2个文件夹AB和那些2个文件file1.py和​​存在于AB文件夹,那么你必须导入它这样

import Z.A.file1 
print(file1.TMP_DATA_FILE) 
相关问题