Как импортировать файл в Python

Обновлено: 04.07.2024

Как и другие популярные языки программирования, такие как C, C++ и т. д., Python поддерживает работу с файлами. Это позволяет программистам работать с файлами и, по сути, выполнять некоторые основные операции, такие как чтение, запись и некоторые другие параметры обработки файлов для работы с файлами.

Нет необходимости импортировать внешние библиотеки для чтения и записи файлов в Python. Python предоставляет встроенные функции для чтения, записи и создания файлов.

Текстовые или двоичные файлы можно открывать для чтения, записи и изменения, но их нельзя импортировать. Слово «импорт» здесь может ввести в заблуждение, поэтому во всей статье мы будем называть его открытием файла.

Используйте функцию open() для импорта файла в Python

Функция open(), как следует из ее названия, используется для открытия текстового или двоичного файла в Python. Это встроенная функция, поэтому ее можно использовать без импорта какого-либо модуля.

Синтаксис функции open() показан ниже.

У функции open() есть несколько параметров, но наиболее важными являются первые два, а именно path_to_file и mode.

Режим path_to_file указывает путь или имя файла, а параметр режима указывает режим, в котором мы хотим открыть файл.

В следующем коде используется функция open() для открытия текстового файла в Python.

Эта строка кода открывает файл с именем file.txt в режиме чтения.

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

В следующем коде используется функция close() для закрытия файла в Python.

Используйте функцию numpy.genfromtxt() для импорта файла в Python

Для использования функции genfromtxt() необходимо импортировать библиотеку NumPy.

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

Функция genfromtxt() используется для загрузки данных из текстового файла. Это особенно полезно при работе с числами и пригодится, когда необходимо обработать некоторые пропущенные значения, как указано.

В следующем коде используется функция genfromtxt() для открытия текстового файла в Python.

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

Статьи DelftStack написаны такими же фанатами программного обеспечения, как и вы. Если вы также хотите внести свой вклад в DelftStack, написав платные статьи, вы можете посетить страницу «Написать для нас».

Статья по теме — файл Python


сообщить об этом объявлении

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

Для этого в Python есть способ поместить определения в файл и использовать их в сценарии или в интерактивном экземпляре интерпретатора. Такой файл называется модулем; определения из модуля можно импортировать в другие модули или в главный модуль (набор переменных, к которым у вас есть доступ в скрипте, выполняемом на верхнем уровне, и в калькуляторе). режим).

Модуль — это файл, содержащий определения и операторы Python. Имя файла — это имя модуля с добавленным суффиксом .py. Внутри модуля имя модуля (в виде строки) доступно как значение глобальной переменной __name__. Например, с помощью вашего любимого текстового редактора создайте файл fibo.py в текущем каталоге со следующим содержимым:

Теперь войдите в интерпретатор Python и импортируйте этот модуль с помощью следующей команды:

Это не вводит имена функций, определенных в fibo, непосредственно в текущую таблицу символов; он вводит туда только имя модуля fibo. Используя имя модуля, вы можете получить доступ к функциям:

Если вы собираетесь часто использовать функцию, вы можете присвоить ей локальное имя:

6.1. Подробнее о модулях¶

Модуль может содержать исполняемые операторы, а также определения функций.Эти операторы предназначены для инициализации модуля. Они выполняются только в первый раз, когда имя модуля встречается в операторе импорта. 1 (Они также запускаются, если файл выполняется как скрипт.)

Каждый модуль имеет свою собственную таблицу символов, которая используется в качестве глобальной таблицы символов всеми функциями, определенными в модуле. Таким образом, автор модуля может использовать глобальные переменные в модуле, не беспокоясь о случайных столкновениях с глобальными переменными пользователя. С другой стороны, если вы знаете, что делаете, вы можете обращаться к глобальным переменным модуля с той же нотацией, которая используется для обозначения его функций, modname.itemname .

Модули могут импортировать другие модули. Обычно, но не обязательно, все операторы импорта помещаются в начало модуля (или скрипта, если уж на то пошло). Имена импортированных модулей помещаются в глобальную таблицу символов импортирующего модуля.

Существует вариант оператора импорта, который импортирует имена из модуля непосредственно в таблицу символов импортирующего модуля. Например:

Это не вводит имя модуля, из которого берутся импорты, в локальную таблицу символов (поэтому в примере фибо не определено).

Существует даже вариант импорта всех имен, определенных модулем:

При этом импортируются все имена, кроме тех, которые начинаются с символа подчеркивания ( _ ). В большинстве случаев программисты на Python не используют эту возможность, поскольку она вводит в интерпретатор неизвестный набор имен, возможно, скрывая некоторые вещи, которые вы уже определили.

Обратите внимание, что обычно практика импорта * из модуля или пакета осуждается, так как это часто приводит к плохо читаемому коду. Однако его можно использовать для экономии ввода в интерактивных сеансах.

Если за именем модуля следует as , то имя после as напрямую связано с импортированным модулем.

Это фактически импортирует модуль так же, как это делает import fibo, с той лишь разницей, что он доступен как fib .

Его также можно использовать при использовании from с аналогичными эффектами:

Из соображений эффективности каждый модуль импортируется только один раз за сеанс интерпретатора. Поэтому, если вы меняете свои модули, вы должны перезапустить интерпретатор — или, если вы хотите протестировать только один модуль в интерактивном режиме, используйте importlib.reload() , например импортировать импортную библиотеку; importlib.reload(имя модуля) .

6.1.1. Выполнение модулей как скриптов¶

Когда вы запускаете модуль Python с

код в модуле будет выполнен так же, как если бы вы его импортировали, но с __name__, установленным на "__main__" . Это означает, что, добавив этот код в конец вашего модуля:

вы можете сделать файл пригодным для использования как скрипт, а также как импортируемый модуль, потому что код, анализирующий командную строку, запускается только в том случае, если модуль выполняется как «основной» файл:

Если модуль импортирован, код не запускается:

Это часто используется либо для предоставления удобного пользовательского интерфейса модулю, либо для целей тестирования (запуск модуля как сценария выполняет набор тестов).

6.1.2. Путь поиска модуля¶

Когда импортируется модуль с именем spam, интерпретатор сначала ищет встроенный модуль с таким именем. Если он не найден, он ищет файл с именем spam.py в списке каталогов, заданном переменной sys.path. sys.path инициализируется из следующих мест:

Каталог, содержащий входной скрипт (или текущий каталог, если файл не указан).

PYTHONPATH (список имен каталогов с тем же синтаксисом, что и переменная оболочки PATH ).

Зависимое от установки значение по умолчанию (по соглашению включает каталог site-packages, обрабатываемый модулем site).

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

После инициализации программы Python могут изменять sys.path . Каталог, содержащий выполняемый скрипт, помещается в начало пути поиска перед стандартным путем библиотеки. Это означает, что скрипты в этом каталоге будут загружены вместо одноименных модулей в каталоге библиотеки. Это ошибка, если замена не предназначена. Дополнительную информацию см. в разделе Стандартные модули.

6.1.3. «Скомпилированные» файлы Python¶

Чтобы ускорить загрузку модулей, Python кэширует скомпилированную версию каждого модуля в каталоге __pycache__ под именем module. версия .pyc , где версия кодирует формат скомпилированного файла; обычно он содержит номер версии Python. Например, в выпуске CPython 3.3 скомпилированная версия spam.py будет кэшироваться как __pycache__/spam.cpython-33.pyc. Это соглашение об именах позволяет сосуществовать скомпилированным модулям из разных выпусков и разных версий Python.

Python сравнивает дату модификации исходного кода с скомпилированной версией, чтобы определить, не устарела ли она и не нуждается ли она в повторной компиляции. Это полностью автоматический процесс. Кроме того, скомпилированные модули не зависят от платформы, поэтому одну и ту же библиотеку можно использовать в системах с разной архитектурой.

Python не проверяет кэш в двух случаях. Во-первых, он всегда перекомпилирует и не сохраняет результат для модуля, загруженного непосредственно из командной строки. Во-вторых, он не проверяет кэш, если нет исходного модуля. Для поддержки не исходного (только скомпилированного) дистрибутива скомпилированный модуль должен находиться в исходном каталоге, и не должно быть исходного модуля.

Несколько советов для экспертов:

Вы можете использовать ключи -O или -OO в команде Python, чтобы уменьшить размер скомпилированного модуля. Переключатель -O удаляет утверждения утверждений, переключатель -OO удаляет как утверждения утверждений, так и строки __doc__. Поскольку некоторые программы могут полагаться на их доступность, вам следует использовать эту опцию только в том случае, если вы знаете, что делаете. «Оптимизированные» модули имеют тег opt-tag и обычно меньше по размеру. В будущих версиях результаты оптимизации могут быть изменены.

При чтении из файла .pyc программа работает не быстрее, чем при чтении из файла .py; единственное, что быстрее в файлах .pyc, — это скорость их загрузки.

Модуль compileall может создавать файлы .pyc для всех модулей в каталоге.

Подробнее об этом процессе, включая блок-схему решений, см. в PEP 3147.

6.2. Стандартные модули¶

Python поставляется с библиотекой стандартных модулей, описанных в отдельном документе — Справочнике по библиотеке Python (далее — «Справочник по библиотеке»). Некоторые модули встроены в интерпретатор; они обеспечивают доступ к операциям, которые не являются частью ядра языка, но, тем не менее, встроены либо для повышения эффективности, либо для предоставления доступа к примитивам операционной системы, таким как системные вызовы. Набор таких модулей является опцией конфигурации, которая также зависит от базовой платформы. Например, модуль winreg предоставляется только в системах Windows. Отдельного внимания заслуживает один конкретный модуль: sys, встроенный в каждый интерпретатор Python. Переменные sys.ps1 и sys.ps2 определяют строки, используемые в качестве основных и дополнительных подсказок:

Эти две переменные определяются только в том случае, если интерпретатор находится в интерактивном режиме.

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

6.3. Функция dir()¶

Встроенная функция dir() используется для определения имен, определяемых модулем. Он возвращает отсортированный список строк:

Без аргументов dir() перечисляет имена, которые вы определили в данный момент:

Обратите внимание, что в нем перечислены все типы имен: переменные, модули, функции и т. д.

dir() не перечисляет имена встроенных функций и переменных. Если вам нужен их список, они определены в стандартных встроенных модулях:

6.4. Пакеты¶

Пакеты — это способ структурирования пространства имен модулей Python с помощью «точечных имен модулей». Например, имя модуля A.B обозначает подмодуль с именем B в пакете с именем A. Точно так же, как использование модулей избавляет авторов разных модулей от необходимости беспокоиться об именах глобальных переменных друг друга, использование имен модулей с точками избавляет авторов многомодульных пакетов, таких как NumPy или Pillow, от необходимости беспокоиться об именах модулей друг друга. .

Предположим, вы хотите разработать набор модулей («пакет») для единообразной обработки звуковых файлов и звуковых данных. Существует множество различных форматов звуковых файлов (обычно распознаваемых по их расширениям, например: .wav, .aiff, .au), поэтому вам может потребоваться создать и поддерживать растущую коллекцию модулей для преобразования между различными форматами файлов. Существует также множество различных операций, которые вы, возможно, захотите выполнить со звуковыми данными (например, микширование, добавление эха, применение функции эквалайзера, создание искусственного стереоэффекта), так что, кроме того, вы будете писать нескончаемый поток модулей для выполнения. эти операции. Вот возможная структура вашего пакета (выраженная в терминах иерархической файловой системы):

При импорте пакета Python просматривает каталоги sys.path в поисках подкаталога пакета.

Файлы __init__.py необходимы для того, чтобы Python рассматривал каталоги, содержащие файл, как пакеты. Это предотвращает непреднамеренное сокрытие допустимых модулей каталогами с общим именем, таким как string , которые встречаются позже в пути поиска модулей. В простейшем случае __init__.py может быть просто пустым файлом, но он также может выполнять код инициализации пакета или устанавливать переменную __all__, описанную ниже.

Пользователи пакета могут импортировать отдельные модули из пакета, например:

Это загружает подмодуль sound.effects.echo. На него должно указываться его полное имя.

Альтернативный способ импорта подмодуля:

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

Еще один вариант — импортировать нужную функцию или переменную напрямую:

Опять же, это загружает подмодуль echo , но делает его функцию echofilter() доступной напрямую:

Обратите внимание, что при использовании элемента импорта из пакета элемент может быть либо подмодулем (или подпакетом) пакета, либо каким-либо другим именем, определенным в пакете, например, функцией, классом или переменной. Оператор импорта сначала проверяет, определен ли элемент в пакете; если нет, он предполагает, что это модуль, и пытается загрузить его. Если его не удается найти, возникает исключение ImportError.

Наоборот, при использовании синтаксиса наподобие import item.subitem.subsubitem каждый элемент, кроме последнего, должен быть пакетом; последний элемент может быть модулем или пакетом, но не может быть классом, функцией или переменной, определенной в предыдущем элементе.

6.4.1. Импорт * из пакета¶

Что происходит, когда пользователь пишет из sound.effects import * ? В идеале можно было бы надеяться, что это каким-то образом выйдет в файловую систему, найдет, какие подмодули присутствуют в пакете, и импортирует их все. Это может занять много времени, а импорт подмодулей может привести к нежелательным побочным эффектам, которые должны иметь место только при явном импорте подмодуля.

Единственным решением для автора пакета является предоставление явного индекса пакета. В операторе импорта используется следующее соглашение: если код пакета __init__.py определяет список с именем __all__ , он считается списком имен модулей, которые следует импортировать, когда встречается from package import *. Автор пакета должен поддерживать этот список в актуальном состоянии при выпуске новой версии пакета. Авторы пакетов также могут принять решение не поддерживать его, если они не видят смысла в импорте * из своего пакета. Например, файл sound/effects/__init__.py может содержать следующий код:

Это будет означать, что из sound.effects import * будут импортированы три именованных подмодуля звукового пакета.

Если __all__ не определено, инструкция из sound.effects import * не импортирует все подмодули из пакета sound.effects в текущее пространство имен; это только гарантирует, что пакет sound.effects был импортирован (возможно, запуск любого кода инициализации в __init__.py ), а затем импортирует любые имена, определенные в пакете. Сюда входят любые имена, определенные (и явно загруженные подмодули) с помощью __init__.py. Он также включает любые подмодули пакета, которые были явно загружены предыдущими операторами импорта. Рассмотрим этот код:

В этом примере модули эха и объемного звучания импортируются в текущее пространство имен, так как они определены в пакете sound.effects, когда файл from. выполняется оператор импорта. (Это также работает, когда определено __all__.)

Несмотря на то, что некоторые модули предназначены для экспорта только тех имен, которые соответствуют определенным шаблонам при использовании import * , это по-прежнему считается плохой практикой в ​​производственном коде.

Помните, что нет ничего плохого в использовании from package importspecific_submodule ! На самом деле это рекомендуемая нотация, если импортирующему модулю не нужно использовать подмодули с одинаковыми именами из разных пакетов.

6.4.2. Внутрипакетные ссылки¶

Когда пакеты структурированы в подпакеты (как в случае со звуковым пакетом в примере), вы можете использовать абсолютный импорт для ссылки на подмодули одноуровневых пакетов. Например, если модулю sound.filters.vocoder необходимо использовать модуль echo в пакете sound.effects, он может использовать from sound.effects import echo .

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

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

6.4.3. Пакеты в нескольких каталогах¶

Пакеты поддерживают еще один специальный атрибут — __path__ . Он инициализируется как список, содержащий имя каталога, содержащего __init__.py пакета, до выполнения кода в этом файле. Эту переменную можно изменить; это повлияет на дальнейший поиск модулей и подпакетов, содержащихся в пакете.

Хотя эта функция требуется нечасто, ее можно использовать для расширения набора модулей в пакете.

Фактически определения функций также являются «операторами», которые «выполняются»; выполнение определения функции на уровне модуля вводит имя функции в глобальную таблицу символов модуля.

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

Вы не можете использовать что-либо в Python, пока оно не определено.

Некоторые функции встроены; например, основные типы данных (такие как float, int, boolean и т. д.) можно использовать, когда это необходимо. Но для большинства вещей, которые вам нужно сделать, потребуется немного больше, чем это. Так что вам нужно сначала импортировать его, а затем вы можете использовать его методы и функции.

Например, если вы хотите создать случайное число, вам нужно импортировать случайный пакет с помощью «import random»; если вы собираетесь получить доступ к файловой системе, вы будете использовать пакет ОС.

Файл импорта Python

Чтобы импортировать файл или модуль в Python, используйте оператор import. Модуль представляет собой файл, содержащий определения и операторы. Чтобы использовать модуль Python, мы должны импортировать модуль в другие файлы или файлы, которые вы должны выполнить.

Язык Python может помещать определения в один файл и использовать их в скрипте или интерактивном экземпляре интерпретатора. Такой файл называется модулем; определения из модуля можно импортировать в другие модули или в основной модуль (набор переменных, к которым у вас есть доступ в скрипте, выполняемом на верхнем уровне и в режиме калькулятора).

Имя файла представляет собой имя модуля с добавленным суффиксом .py. Имя модуля (в виде строки) доступно как значение глобальной переменной __name__.

Например, создайте новый файл с именем sum.py и добавьте в него следующий код.

В файле sum.py есть одна функция add(), которая принимает два параметра и возвращает сумму предоставленных аргументов.

Файл sum.py — это модуль в указанном выше файле, а add() — его метод.

Теперь мы можем импортировать модуль суммы, используя «сумму импорта» внутри другого файла. Но сначала давайте импортируем в файл app.py, который находится в том же каталоге, что и файл sum.py.

Итак, синтаксис импорта следующий.

Синтаксис импорта Python

В нашем примере имя модуля = сумма.

Теперь мы можем использовать функцию add() модуля sum.

Вывод

Если вы собираетесь использовать функцию add() в файле более одного раза, вы можете присвоить ей локальное имя.

Вывод

В приведенном выше коде мы назначили функцию sum() для суммирования локального имени, а затем использовали его в любом месте файла.

Подробнее о модулях импорта

Модули Python могут содержать исполняемые операторы, а также определения функций. Эти операторы предназначены для инициализации модуля.

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

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

Некоторые варианты оператора импорта импортируют имена из модуля непосредственно в таблицу символов импортирующего модуля.

Например, см. следующий код.

Вывод

Вы получите тот же результат.

Это не вводит имя модуля, из которого берутся импорты, в локальную таблицу символов (поэтому сумма не определена).

Существует даже вариант импорта всех имен, определенных модулем.

См. следующий код.

Вывод

При этом импортируются все имена, кроме тех, которые начинаются с символа подчеркивания (_).

Итак, это способы импорта файла в Python. Вот и все.

См. также

Крунал Латия – инженер по информационным технологиям. По профессии он веб-разработчик со знанием нескольких внутренних платформ (например, PHP, Node.js, Python) и интерфейсных сред JavaScript (например, Angular, React и Vue).

Хотя это дает мне все определения в extra.py , когда, возможно, все, что мне нужно, это одно определение:

Что мне добавить в оператор импорта, чтобы просто получить пробел из extra.py?

Если файлы A и B находятся в одном каталоге в Python 3.x, и вы хотите импортировать содержимое файла A, импорт файла A не будет работать. Мы должны использовать from current_directory_name import * или from current_directory_name import THINGS_YOU_WANT_TO_IMPORT . Немного поэкспериментируйте с импортом из другого каталога

23 ответа 23

Существует множество способов импорта файла Python, каждый со своими плюсами и минусами.

Не выбирайте поспешно первую стратегию импорта, которая вам подходит, иначе вам придется переписывать кодовую базу позже, когда вы обнаружите, что она не соответствует вашим потребностям.

Пример 1. Импорт модуля Python с помощью интерпретатора Python:

Поместите это в /home/el/foo/fox.py:

Войдите в интерпретатор Python:

Вы импортировали fox через интерпретатор Python, вызвали функцию Python what_does_the_fox_say() из fox.py.

Пример 2. Используйте execfile или ( exec в Python 3) в скрипте для выполнения другого файла python на месте:

Поместите это в /home/el/foo2/mylib.py:

Поместите это в /home/el/foo2/main.py:

Функция moobar была импортирована из mylib.py и доступна в main.py

Пример 3. Использование from . импорт . функциональность:

Поместите это в /home/el/foo3/chekov.py:

Поместите это в /home/el/foo3/main.py:

Запустите его следующим образом:

Если вы определили другие функции в chekov.py, они будут недоступны, пока вы не импортируете *

Пример 4. Импортируйте riaa.py, если он находится в другом месте файла, откуда он был импортирован

Поместите это в /home/el/foo4/stuff/riaa.py:

Поместите это в /home/el/foo4/main.py:

При этом все содержимое внешнего файла импортируется из другого каталога.

Пример 5: используйте os.system("python yourfile.py")

Пример 6: импортируйте файл с помощью автозапуска python:

Обновление: раньше этот пример работал как для python2, так и для 3, но теперь работает только для python2. python3 избавился от этого пользовательского набора функций startuphook, потому что им злоупотребляли низкоквалифицированные авторы библиотек Python, используя его для невежливого внедрения своего кода в глобальное пространство имен перед всеми программами, определяемыми пользователем. Если вы хотите, чтобы это работало для python3, вам придется проявить больше творчества. Если я скажу вам, как это сделать, разработчики Python отключат и этот набор функций, так что вы будете предоставлены сами себе.

Поместите этот код в свой домашний каталог ~/.pythonrc.py

Поместите этот код в файл main.py (может быть где угодно):

Запустите его, вы должны получить следующее:

Пример 7, самый надежный: импорт файлов в python с помощью простой команды импорта:

  1. Создайте новый каталог /home/el/foo5/
  2. Создайте новый каталог /home/el/foo5/herp

Создайте пустой файл с именем __init__.py под herp:

Создайте новый каталог /home/el/foo5/herp/derp

В разделе derp создайте еще один файл __init__.py:

Момент истины. Создайте новый файл /home/el/foo5/main.py , поместите его туда;

Пустой файл __init__.py сообщает интерпретатору Python, что разработчик намеревается сделать этот каталог импортируемым пакетом.

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

В чем большая разница между ними и почему один лучше другого? Например, в примере 5 вы пишете «Импортировать файлы в python с помощью простой команды импорта», но вы также используете (голую?) команду импорта в примерах 1, 3 и 4, не так ли?

Хороший ответ, но тот факт, что вы все время используете в качестве примера другой файл импорта, затрудняет чтение.

Я хотел бы подчеркнуть, что даже если вы работаете в Windows, импорт чувствителен к регистру. Таким образом, вы не можете иметь Module.py и модуль импорта кода

importlib была добавлена ​​в Python 3 для программного импорта модуля.

Расширение .py должно быть удалено из moduleName . Функция также определяет аргумент пакета для относительного импорта.

  • Просто импортируйте файл без расширения .py
  • Папку можно пометить как пакет, добавив пустой файл __init__.py
  • Вы можете использовать функцию __import__, которая принимает имя модуля (без расширения) в качестве расширения строки

Введите help(__import__) для получения дополнительной информации.

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

из справки(__import__): поскольку эта функция предназначена для использования интерпретатором Python, а не для общего использования, лучше использовать importlib.import_module() для программного импорта модуля.

Импорт в Python представляет собой причудливую путаницу. Должна быть возможность импортировать любую функцию из любого файла с помощью простой строки кода, указывающей путь (абсолютный или относительный, жестко запрограммированный или сохраненный в переменной) к файлу. Питон, просто сделай это!

Чтобы импортировать конкретный файл Python во время выполнения с известным именем:

Мой друг проверил это сегодня, но безуспешно. Похоже, имени файла там быть не должно. Он использовал локальный файл в родительском каталоге, а "./" работал в конце, как если бы родительский каталог (..). Исправление проблемы в сообщении было отклонено - вероятно, неправильное понимание(?) Напечатайте sys.path и сравните записи, если вы не уверены.

Первый случай

Вы хотите импортировать файл A.py в файл B.py эти два файла находятся в одной папке, вот так:

Вы можете сделать это в файле B.py:

Тогда вы сможете использовать все функции файла A.py в файле B.py

Второй случай

Вы хотите импортировать файл folder/A.py в файл B.py, эти два файла не находятся в одной папке, например:

Вы можете сделать это в файле B.py:

Тогда вы сможете использовать все функции файла A.py в файле B.py

  • В первом случае файл A.py — это модуль, который вы импортируете в файл B.py, вы использовали синтаксис import имя_модуля.
  • Во втором случае папка — это пакет, содержащий модуль A.py , вы использовали синтаксис import имя_пакета.имя_модуля .

Для получения дополнительной информации о пакетах и ​​модулях перейдите по этой ссылке.

Я попробовал с небольшими вариациями, и это сработало. from folder_a.script import * Script.py находится в папке a.

+1 Это то, что я искал. Не мог понять другие ответы, но вы объяснили это с помощью справочников.

У вас не так много сложных методов для импорта файла Python из одной папки в другую. Просто создайте файл __init__.py, чтобы объявить, что эта папка является пакетом Python, а затем перейдите к файлу хоста, куда вы хотите импортировать, просто введите

из root.parent.folder.file импортировать переменную, класс, что угодно

Импортировать документ .. -- Ссылка для справки

Файлы __init__.py необходимы для того, чтобы Python рассматривал каталоги как содержащие пакеты. Это делается для предотвращения непреднамеренного сокрытия допустимых модулей каталогами с общим именем, например string, которые встречаются позже в пути поиска модулей.< /p>

__init__.py может быть просто пустым файлом, но он также может выполнять код инициализации пакета или устанавливать переменную __all__.

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

Если определенная функция находится в файле x.py:

В файле, в который вы импортируете функцию, напишите следующее:

Это удобно, если вы не хотите импортировать все функции в файл.

Я импортирую файл и использую сокращение его имени.

Не забывайте, что ваш импортируемый файл ДОЛЖЕН БЫТЬ назван с расширением .py

Это нарушение условий сделки. В крайнем случае я буду встраивать PHP для импорта сейчас, мне не нужно просто импортировать def. Я могу захотеть импортировать тракты «только для разработчиков» или общие файлы app.cfg. Я просто хочу иметь возможность заменить код. Предварительная обработка — гнилой способ сделать это.

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

этот пост Майка Гручи — прекрасное объяснение __init__.py и его использования для создания, импорта и настройки пакетов Python.

Я хотел бы добавить это примечание, которое я не очень четко вижу в другом месте; внутри модуля/пакета при загрузке из файлов имя модуля/пакета должно начинаться с префикса mymodule . Представьте, что мой модуль выглядит следующим образом:

При загрузке somefile.py/otherstuff.py из __init__.py содержимое должно выглядеть так:

Используя Python 3.5 или более позднюю версию, вы можете использовать importlib.util для прямого импорта файла .py в произвольное место в качестве модуля без необходимости изменять sys.path .

Параметр file_name должен быть строкой или объектом, подобным пути. Параметр module_name является обязательным, поскольку все загруженные модули Python должны иметь имя модуля (с точкой) (например, sys , importlib или importlib.util ), но вы можете выбрать любое доступное имя для этого нового модуля.

Вы можете использовать эту функцию следующим образом:

После того, как он был один раз импортирован в процесс Python с помощью функции load_module(), модуль можно будет импортировать, используя данное ему имя модуля.

Учитывая указанные выше файлы, вы можете запустить следующую команду, чтобы увидеть, как файл file.py стал импортируемым.

Этот ответ основан на официальной документации Python: importlib: прямой импорт исходного файла.

Чтобы импортировать любой файл .py, вы можете использовать приведенный выше код.

Сначала добавьте путь, а затем импортируйте

Примечание: каталог '../input/tokenization' содержит файл tokenization.py

Есть несколько способов включить ваш скрипт Python с именем abc.py

  1. напр. если ваш файл называется abc.py (импорт abc). Ограничение состоит в том, что ваш файл должен находиться в том же месте, где находится ваш вызывающий скрипт Python.
  1. напр. если ваш файл python находится в папке Windows. Папка Windows находится в том же месте, где находится вызывающий скрипт Python.
  1. Если скрипт abc.py доступен внутри внутренней_папки, которая находится внутри папки

из папки.internal_folder импортировать abc

  1. Как ответил Джеймс выше, если ваш файл находится в каком-то фиксированном месте

import os
import sys
scriptpath = "../Test/MyModule.py"
sys.path.append(os.path.abspath(scriptpath)) < br />импорт MyModule

Если ваш скрипт Python обновляется и вы не хотите загружать его, используйте эти операторы для автоматического обновления. Бонус :)

Если модуль, который вы хотите импортировать, не находится в подкаталоге, попробуйте следующее и запустите app.py из самого глубокого общего родительского каталога:

В app.py добавьте путь клиента к sys.path:

Необязательно (если вы загружаете, например, конфигурации) (Inspect кажется наиболее надежным для моих случаев использования)

Это решение работает для меня в cli, а также в PyCharm.

Вот как я вызывал функцию из файла Python, что позволяет мне вызывать любые функции.

@qwr Новая функция callfunc() — это просто оболочка кода для динамического вызова целевой функции в файле Python. Приведенный пример — это цель «myfunc» в файле Python «pathto/myfile.py». Что вы подразумеваете под «непосредственным использованием функции»?

У меня отлично работает. В моем примере я заменил: from mypath import Path на Path = callfunc("/folder/to/mypath.py", "Path") . Спасибо @Xiao-FengLi

Просто импортировать файл Python в другой файл Python

скажем, у меня есть файл python helper.py, который имеет функцию отображения, например,

Теперь в app.py вы можете использовать функцию отображения,

Я работаю в Sundar GSV

ПРИМЕЧАНИЕ. Расширение .py указывать не нужно.

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

Вы также можете сделать это: импортировать что-нибудь из имени файла

пример: from client import Client Обратите внимание, что расширение .py .pyw .pyui не требуется.

Одной очень неизвестной функцией Python является возможность импорта zip-файлов:

Файл __init__.py пакета содержит следующее:

Мы можем написать еще один скрипт, который сможет импортировать пакет из zip-архива. Необходимо только добавить zip-файл в sys.path.

Это помогло мне структурировать мой проект Python с помощью Visual Studio Code.

Проблема может быть вызвана тем, что вы не объявляете __init__.py внутри каталога. И каталог становится неявным пакетом пространства имен. Вот хорошее резюме об импорте Python и структуре проекта.

кнопка запуска

Кроме того, если вы хотите использовать кнопку запуска Visual Studio Code на верхней панели со сценарием, которого нет в основном пакете, вы можете попробовать запустить консоль из фактического каталога.

Например, вы хотите выполнить открытый файл test_game_item.py из пакета тестов, а код Visual Studio открыт в каталоге omission (главный пакет):

Структура каталогов взята из [2].

Вы можете попробовать установить это:

(Windows) Ctrl + Shift + P → Настройки: Открыть настройки (JSON).

Добавьте эту строку в настройки пользователя:

В этом вопросе содержится более полный ответ и для других систем.

Существует много способов, перечисленных выше, но я обнаружил, что хочу просто импортировать содержимое файла и не хочу писать строки и строки и импортировать другое модули. Итак, я придумал способ получить содержимое файла, даже с точечным синтаксисом ( file.property ), в отличие от слияния импортированного файла с вашим.
Прежде всего, вот мой файл, который я импортирую, data.py


Примечание. Вместо этого вы можете использовать расширение .txt.
В mainfile.py начните с открытия и получения содержимого.

Теперь у вас есть содержимое в виде строки, но попытка доступа к data.testString вызовет ошибку, поскольку данные являются экземпляром класса str, и даже если у них есть свойство testString, они не будут делать то, что вы ожидали. .
Далее создайте класс. Например (каламбур), ImportedFile

И поместите туда это (с соответствующим отступом):


И, наконец, переназначьте данные следующим образом:

И все! Просто получите доступ, как и для любого другого модуля, введите print(data.testString) и выведет на консоль строковый литерал для импорта и тестирования с помощью .
Однако, если вам нужен эквивалент from mod import *, просто отбросьте класс, назначение экземпляра и удалите exec .

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

Распространенный способ создания модуля Python — создать файл с именем, оканчивающимся на .py , и записать в него код модуля.Если мы используем другое расширение файла в имени файла или вообще не используем расширение, стандартные операторы импорта, показанные ниже, не будут работать, и вместо этого нам придется использовать importlib, что требует дополнительного кода (дополнительная информация ниже).

Чтобы проиллюстрировать стандартное использование импорта, предположим, что мы создаем файл с именем mymodule.py со следующим определением функции:

Теперь каждый раз, когда мы хотим написать "Hello, world!" на экран из сценария Python, мы можем просто импортировать этот модуль, а не писать сообщение снова. Это также позволяет нам изменить одну строку кода внутри mymodule.py, а не во многих разных сценариях, если мы когда-нибудь решим изменить сообщение, которое мы хотим показать во всех сценариях, использующих эту функцию.

Импорт файла в тот же каталог

Допустим, у нас есть два файла Python в одном каталоге:

mymodule.py содержит функцию say_hello(), которую мы видели выше.

Чтобы вызвать say_hello() из script.py, мы можем написать в script.py:

Имя, используемое в операторе импорта, представляет собой просто имя файла модуля без расширения .py в конце.

Импорт файла в подкаталог (Python 3.3 и выше)

Версии Python 3.3 и выше позволяют легко импортировать модули в подкаталоги текущего каталога скрипта. Если вы используете версию Python ниже 3.3, вы можете вместо этого выполнить шаги из раздела «Импорт файла в другой каталог».

Допустим, мы перемещаем mymodule.py в подкаталог с именем subdir :

Тогда, если мы используем Python 3.3 или выше, мы можем написать в script.py:

В пути к файловой системе мы разделяем компоненты пути с помощью / (Linux, macOS и т. д.) или \ (Windows). Однако в операторе импорта Python мы разделяем компоненты пути с помощью точки ( . ).

Мы также можем присвоить модулю более короткое имя, используя оператор import - as:

где m — любое выбранное нами имя. Мы также можем импортировать функцию напрямую:

Читайте также: