2013-11-14 2 views
0

data_file.py -> следующее содержимое data_file.pyсловарь Чтение из питона файла в другой питон скрипт

numbers = [1,2,3,4,5] 

alpha = ['a','b','c','d','e'] 

D_num_alpha = dict(zip(numbers,alpha)) 

new_python.py

data_file = '/Users/user/desktop/data_file.py' 
open(data_file,'r').read() 
print numbers 
>>>NameError: name 'numbers' is not defined 

Я пытаюсь использовать этот словарь, сделанный в data_file.py внутри new_python.py, но я могу только прочитать его в строке.

+0

Если я что-то не понимаю об этом, почему бы не сделать его модулем и не импортировать data_file.py'? – shuttle87

ответ

2

Учитывая, что ваш файл данных питон скрипт, то вы, возможно, хотите импортировать это вместо того, чтобы, выполнив:

from data_file import numbers 

print numbers 

Если питон файл, который вы пытаетесь импортировать в другой каталог это занимает немного больше усилия, для этого вы должны сделать следующее:

изменить код, чтобы сказать питона, где искать модуль:

import sys 
sys.path.append("path to include directory") 
from data_file import numbers 

print numbers 

создать пустой файл кал led __init__.py в том же каталоге, что и файл, который вы импортируете. Это говорит о том, что вы хотите использовать папку с импортом. Вы можете узнать больше о том, почему вам нужно __init__.py над на documentation here.

Обратите внимание, что существует несколько различных были, в котором вы можете сказать питону, как импортировать из другого каталога, см this question для получения дополнительной информации.

Вы также можете увидеть это PEP about relative imports.

Нет необходимости в каких-либо неприятных eval() тем способом, который потенциально может вызвать проблемы позже.

+0

ImportError: Нет модуля с именем data_file –

+0

Извините, не знал, что они были в разных папках, сейчас отредактирует мой ответ. – shuttle87

+0

@ draconisthe0ry, это разрешает вашу проблему? – shuttle87

2

Если вы уверены, что ни один скрипт не будет подделан, вы можете использовать eval().

Ваш код будет выглядеть следующим образом:

data_file = '/Users/user/desktop/data_file.py' 
eval(open(data_file,'r').read()) 
print numbers 

EDIT: Еще один способ импортировать data_file.py как модуль. Если data_file.py в /path/to/data

import sys 
sys.path.append('/path/to/data') 
import data_file 

print data_file.numbers 

Это лучший подход, если у вас нет особых причин, почему вы не хотите, полноту data_file.py оцененную.

+0

говорит, что мой файл не является модулем? вы знаете, почему? –

+0

Где 'data_file.py' в файловой системе относительно' new_python.py' (а также '$ PYTHONPATH')? Я отредактирую свой ответ, чтобы показать, как вы можете добавить его путь. – Jud

+0

в совершенно другой папке, но я указал путь с помощью data_file. что этого недостаточно? –

Смежные вопросы