Как импортировать переменную из разных типов файлов - PullRequest
1 голос
/ 07 января 2010

Я пытаюсь получить переменную из файла другого типа и импортировать ее в скрипт Python. Это файл version.mk, в нем есть переменная VARIABLE_ID. Модуль импорта не работает как обычно, есть ли способ вызвать переменные из других типов файлов?

Спасибо за любую помощь

import os

from version import VERSION_ID

def versionid:

    print VERSION_ID

Это код, который не работает.

Идентификатор версии - формат 0.0.2. Когда я запускаю приведенный ниже код, он говорит, что в числе есть синтаксическая ошибка.

Я прочитал, что distutils имеет соглашение о нумерации версий. Я не уверен, как это можно использовать, кто-нибудь слышал или знает, как это работает?

Есть ли способ иметь комментарии в этом файле, когда комментарии в файле мешают файлу. Может read () просто прочитать version_id, а не комментарии, спасибо

VERSION_ID=map(int,re.match("VERSION_ID\s*=\s*(\S+)",open("version.mk").read()).group(1).split("."))

Ответы [ 2 ]

1 голос
/ 07 января 2010

Если ваш файл не является кодом Python, вы не можете импортировать его, как если бы он был.

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

VERSION_ID = 0.0.2

Поскольку это никогда не может быть допустимым Python (нет литерала, который выглядит так).

Это может быть случай, когда регулярное выражение имеет смысл , может работать что-то вроде r'VERSION_ID\s*=\s*([0-9.]+).

1 голос
/ 07 января 2010

Если вы уверены, что version.mk является допустимым файлом Python и не имеет кодов вреда, вы можете выполнить его.

>>> exec(open("version.mk"))
>>> print VERSION_ID
1

ОБНОВЛЕНИЕ : поскольку OP Добавлено VERSION_ID не является действительным номером питона

version.mk

#version no is here
VERSION_ID=0.0.2

#some more info here
....

-

>>> import re
>>> VERSION_ID=map(int,re.search("VERSION_ID\s*=\s*(\S+)",open("version.mk").read()).group(1).split("."))
>>> VERSION_ID
[0, 0, 2]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...