Подтвердить что ты не робот

В python, как импортировать имя файла начинается с числа

В основном есть файл с именем 8puzzle.py, и я хочу импортировать файл в другой файл (в той же папке, и я не могу изменить имя файла, поскольку файл предоставлен). Есть ли все-таки сделать это в Python? Я пробовал обычный способ from 8puzzle import *, это дает мне ошибку.

Ошибка:

>>> import 8puzzle
  File "<input>", line 1
    import 8puzzle
           ^
SyntaxError: invalid syntax
>>> 
4b9b3361

Ответ 1

Вы могли бы сделать

puzzle = __import__('8puzzle')

Очень интересная проблема. Я помню, чтобы не называть ничего с номером.

Если вы хотите import * - вы должны проверить этот вопрос и ответить.

Ответ 2

Вышеуказанные ответы верны, но на данный момент рекомендуется использовать import_module:

importlib.import_module(name, package=None)
Импортируйте модуль. Имя аргумент указывает, какой модуль импортировать в абсолютном или относительном выражении (например, либо pkg.mod, либо ..mod). Если имя указано в относительном терминов, то аргумент пакета должен быть установлен на имя пакет, который должен выступать в качестве якоря для разрешения имени пакета (например, import_module('..mod', 'pkg.subpkg') будет импортировать pkg.mod).

Функция import_module() действует как упрощающая оболочка вокруг importlib.__import__(). Это означает, что вся семантика функции полученный из importlib.__import__(). Самое важное различие между этими двумя функциями является то, что import_module() возвращает указанный пакет или модуль (например, pkg.mod), а __import__() возвращает пакет или модуль верхнего уровня (например, pkg).

Если вы динамически импортируете модуль, который был создан с момента интерпретатор начал выполнение (например, создал исходный файл Python), вы может потребоваться вызвать invalidate_caches(), чтобы новый модуль был замеченный системой импорта.

__import__ не рекомендуется.

importlib.__import__(name, globals=None, locals=None, fromlist=(), level=0)
Реализация встроенной функции __import__().

Примечание. При программном импорте модулей вместо этой функции следует использовать import_module().

Ответ 3

Не используйте расширение .py в своих импортах.

Работает ли from 8puzzle import *?

Для того, что стоит, from x import * не является предпочтительным шаблоном Python, поскольку он пропускает это пространство имен модулей в ваш текущий контекст.

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

например, если у вас есть 8puzzle.foo, вы можете сделать `из импорта 8puzzle

Edit:

В то время как мое сообщение .py верное, этого недостаточно.

Предложение другого плаката __import__('8puzzle') верно. Однако Я настоятельно рекомендую избегать этого шаблона.

Во-первых, он зарезервировал внутренний, частный метод Python. Вы в основном нарушаете фундаментальные предположения о том, что значит иметь возможность импортировать модуль. Простое переименование файла на что-то еще, например puzzle8, исправит это.

Это отвлечет внимание от опытных программистов на Python, которые ожидают узнать, что ваш импорт находится наверху, и ожидают, что код (попытаться) будет соответствовать PEP8.