pythondictionarypython-3.4

Using python dict imported from file in another python file


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.


Solution

  • 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.