Using python dict imported from file in another python file

40.8k Views Asked by At

I've the same issue as asked by the OP in How to import or include data structures (e.g. a dict) into a Python file from a separate file. However for some reason i'm unable to get it working.

My setup is as follows:

file1.py:

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

file2.py:

from file1 import TMP_DATA_FILE

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

When i do this and run the script from cmd line, it says string indices must be integers.

When i do type(TMP_DATA_FILE), i get class 'str'. I tried to convert this to dict to be able to use dict operations, but couldn't get it working.

If i do print(TMP_DATA_FILE.get(var)), since i'm developing using PyCharm, it lists dict operations like get(), keys(), items(), fromkeys() etc, however when i run the program from command line it says 'str' object has no attributes 'get'.

When i do print(TMP_DATA_FILE) it just lists 'val1'. It doesn't list 'a', 'b', 'val2'.

However the same script when run from PyCharm works without any issues. It's just when i run the script from command line as a separate interpreter process it gives those errors.

I'm not sure if it's PyCharm that's causing the errors or if i'm doing anything wrong.

Originally i had only one key:value in the dict variable and it worked, when i added new key:value pair that's when it started giving those errors.

I've also tried using ast.literal_eval & eval, neither of them worked. Not sure where i'm going wrong.

Any help would be highly appreciated.

Thanks.

4

There are 4 best solutions below

1
On BEST ANSWER

There are two ways you can access variable TMP_DATA_FILE in file file1.py:

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

or:

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

file1.py is in a directory contained in the python search path, or in the same directory as the file importing it.

Check this answer about the python search path.

1
On

You calling it the wrong way. It should be like this :

print file1.TMP_DATA_FILE[var]
0
On

Correct variant:

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

or

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

If you have the packages created in your project, then you have to link the file from the main project.

For example:
If you have a folder Z which contains 2 folders A and B and those 2 files file1.py and file2.py are present in A and B folders, then you have to import it this way

import Z.A.file1
print(file1.TMP_DATA_FILE)