- Как задать путь к файлу в Python?
- Как задать путь к файлу в Python?
- Как задать путь к файлу в Python?
- Самый простой вариант — не самый верный!
- Указываем путь к файлу правильно!
- Задаем относительный путь с помощью Path!
- Задаем абсолютный путь с помощью Path
- А почему не os.path.join?
- Python os.path.join в Windows
- 8 ответов
- Windows path in Python
- 5 Answers 5
- Примеры использования модуля os в Python
- os.name
- os.environ, os.getenv() и os.putenv()
- os.chdir() и os.getcwd()
- os.mkdir() и os.makedirs()
Как задать путь к файлу в Python?
Как задать путь к файлу в Python?
Как задать путь к файлу в Python?
Для решения задач, связанных с редактированием или чтением файла, необходимо сообщить интерпретатору Python имя нужного нам файла, а также адрес, по которому этот файл располагается. Существуют разные способы указания пути к файлу в Python: от самого простого, до самого правильного. Давайте выясним, чем эти варианты отличаются и почему простой вариант не годится на роль лучшего!
Самый простой вариант — не самый верный!
Внимание! У этого способа обнаружен недостаток!
Самый простой вариант задания пути выглядит как последовательность директорий, в которых находится файл, с именем самого файла, разделенные знаками слеша:
Пример относительного пути:
Где вместо «Files» и «info.txt» Вы напишите названия ваших директорий и имя вашего файла соответственно.
Пример абсолютного пути:
Где вместо «C:\Python\pythonw.exe\Files\info.txt», «home/my_comp/Files/» и «info.txt» Вы напишите названия ваших директорий и имя вашего файла соответственно.
Этот вариант рабочий, однако, один существенный недостаток лишил его внимания разработчиков. Проблема заключается в том, что заданные таким способом пути адаптированы только к одному виду операционной системы: к Линукс, либо к Windows, так как в Windows используются обратные слеши «\», а в Линукс — обычные «/». Из-за этого скрипт, показывавший отличные результаты в Windows, начнет жаловаться на отсутствие файлов по прописанному пути в Linux, и наоборот. А с абсолютным путем вообще все сложно: никакого диска «C:» в Линуксе нет. Скрипт опять будет ругаться! Что же делать? Правильно указать путь к файлу!
Указываем путь к файлу правильно!
Внимание! Годный вариант!
Python — умный змей, поэтому в его арсенале, начиная с 3.4 версии появился модуль pathlib, который позволяет вытворять самые приятные вещи с путями к файлу, стоит только импортировать его класс Path:
Кстати, если у вас не установлен модуль pathlib, это легко исправить с помощью команды:
Задаем относительный путь с помощью Path!
После того, как класс импортирован, мы получаем власть над слешами! Теперь вопрос о прямых и обратных слешах в разных операционных системах ложится на плечи Path. Используя Path, вы можете корректно задать относительный путь, который будет работать в разных системах.
Например, в случае расположения файлов, как на представленном изображении, относительный путь, определяемый в скрипте «main_script.py», сформируется автоматически из перечисленных в скобках составных частей. Pathlib инициализирует новый объект класса Path, содержимым которого станет сформированный для Вашей системы относительный путь (в Windows части пути будут разделены обратными слешами, в Linux — обычными):
Задаем абсолютный путь с помощью Path
- cwd() — возвращает путь к рабочей директории
- home() — возвращает путь к домашней директории
Полученную строку, содержащую путь к рабочей или домашней директории, объединим с недостающими участками пути при инициализации объекта класса Path :
Пример 1: с использованием функции cwd():
В данном случае путь к директории имеет вид: dir_path = «/home/molodec/python», а полный путь к файлу «docs.txt» будет иметь вид: «/home/molodec/python/files/info/docs.txt».
Представленный выше код можно оптимизировать и записать в одну строку:
Пример2: с использованием функции home():
В данном случае путь к директории имеет вид: dir_path = «/home/molodec», а полный путь к файлу ‘docs.txt’ будет иметь вид: «/home/molodec/files/info/docs.txt».
Сократим представленный выше код:
А почему не os.path.join?
А что же не так с заслуженным мастером по объединению путей os.path.join() и хранителем секретной информации о расположении рабочей директории os.getcwd()? Действительно, эти замечательные функции в составе модуля os довольно долго служили разработчикам Python верой и правдой. Их вполне можно использовать для определения пути к файлу. Однако, большим недостатком функции join() является невозможность принять для объединения более двух аргументов. Таким образом, чтобы присоединить к рабочей директории путь вида: ‘files/info/docs.txt’, приходится трижды обращаться к функции join(), не забывая при этом искусно жонглировать скобками. Выглядит это примерно так:
Казалось бы, ничего сложного. Однако, зачем громоздить лишние скобки, когда есть более лаконичный вариант с использованием модуля pathlib?
Подведем итог: начиная с версии Python 3.4, для задания пути к файлу рекомендуется использовать модуль pathlib с классом Path. Определить путь к рабочей директории можно с помощью функции cwd(), а путь к домашней директории подскажет функция home().
Python os.path.join в Windows
57 Frank E. [2010-03-11 08:38:00]
Я пытаюсь изучить python и создаю программу, которая выведет script. Я хочу использовать os.path.join, но я довольно смущен. Согласно docs, если я скажу:
Я получаю «C:sourcedir» . Согласно документам, это нормально, верно?
Но когда я использую команду copytree, Python выведет ее желаемым образом, например:
Вот код ошибки, который я получаю:
Если я обернуть os.path.join с помощью os.path.normpath , я получаю ту же ошибку.
Если этот os.path.join не может быть использован таким образом, я смущен его цели.
В соответствии со страницами, предложенными Stack Overflow, косые черты не должны использоваться в join — это верно, я полагаю?
8 ответов
32 Решение [2010-03-11 08:52:00]
В Windows есть концепция текущего каталога для каждого диска. Из-за этого «c:sourcedir» означает «sourcedir» внутри текущего каталога C: и вам нужно указать абсолютный каталог.
Любой из них должен работать и давать тот же результат, но у меня нет виртуальной машины Windows, выпущенной в данный момент, чтобы дважды проверить:
71 AndreasT [2011-10-14 15:56:00]
Чтобы быть еще более педантичным, наиболее согласованный ответ python doc был бы следующим:
Поскольку вам также нужен os.sep для корневого пути posix:
11 Smashery [2010-03-11 08:47:00]
Причина os.path.join(‘C:’, ‘src’) не работает так, как вы ожидаете, из-за чего-то в документации, к которой вы привязались:
Обратите внимание, что в Windows, поскольку есть текущий каталог для каждого диска, os.path.join( «c:», «foo» ) представляет собой путь относительно текущего каталога на диске C: (c: foo), а не c:\foo.
Как сказал ghostdog, вы, вероятно, хотите mypath=os.path.join(‘c:\\’, ‘sourcedir’)
10 Matt Ball [2011-09-15 20:56:00]
Чтобы быть педантичным, это, вероятно, не очень хорошо для hardcode либо/или\как разделитель путей. Может быть, это было бы лучше?
чтобы присоединиться к пути к Windows, попробуйте
в основном, вам нужно будет избежать косой черты
4 georg [2013-07-01 11:09:00]
Я бы сказал, что это ошибка (python) Windows.
Я думаю, что это утверждение должно быть True
Но это False на машинах Windows.
0 SIslam [2016-03-19 12:49:00]
Согласие с @georg —
Я бы сказал тогда, почему нам нужно lame os.path.join — лучше использовать str.join или unicode.join например.
У вас есть несколько возможных подходов к трактовке пути в Windows, от самых жестких (с использованием исходных строковых литералов или ускользающих обратных косых черт) до наименьших. Ниже приведены несколько примеров, которые будут работать, как ожидалось. Используйте то, что лучше соответствует вашим потребностям.
Windows path in Python
What is the best way to represent a Windows directory, for example «C:\meshes\as» ? I have been trying to modify a script but it never works because I can’t seem to get the directory right, I assume because of the ‘\’ acting as escape character?
5 Answers 5
you can use always:
this works both in linux and windows. Other posibility is
if you have problems with some names you can also try raw string literals:
however best practice is to use the os.path module functions that always select the correct configuration for your OS:
From python 3.4 you can also use the pathlib module. This is equivelent to the above:
Use the os.path module.
Or use raw strings
I would also recommend no spaces in the path or file names. And you could use double backslashes in your strings.
Yes, \ in Python string literals denotes the start of an escape sequence. In your path you have a valid two-character escape sequence \a , which is collapsed into one character that is ASCII Bell:
Other common escape sequences include \t (tab), \n (line feed), \r (carriage return):
As you can see, in all these examples the backslash and the next character in the literal were grouped together to form a single character in the final string. The full list of Python’s escape sequences is here.
There are a variety of ways to deal with that:
Python on Windows should handle forward slashes, too.
Примеры использования модуля os в Python
Данный модуль можно применять во многих случаях. В данном разделе мы не рассмотрим каждый из них. Вместо этого, мы рассмотрим, как именно его можно применять, а также ознакомимся с подмодулем, под названием os.path. В частности, мы расскажем о:
Это может выглядеть как большой объем материала, но есть еще минимум десяток других задач, которые модуль os может выполнять. Так что данный раздел можно назвать кратким экскурсом. Для использования любого из методов, упомянутых в данном разделе, вам нужно импортировать модуль os, вот так:
os.name
Модуль os обладает как вызываемыми функциями, так и обычными значениями. В случае с os.name, речь идет только о значениях. При доступе к os.name, вы получите информацию о том, с какой платформой вы работаете. Вам откроются следующие значения: ‘posix’, ‘nt’, ‘os2’, ‘ce’, ‘java’, ‘riscos’. Давайте посмотрим на то, что выйдет, если запустить его на Windows 7:
Это говорит нам о том, что наш экземпляр Пайтон работает в окне Windows. Как мы об этом узнали? Майкрософт начали называть свою операционную систему NT много лет назад. Например, Windows 7 также носит имя Windows NT 6.1.
os.environ, os.getenv() и os.putenv()
Значение os.environ известно как объект мэппинга (сопоставления), который работает со словарем переменных пользовательской среды. Возможно вы не знали, но каждый раз, когда вы пользуетесь своим компьютером, некоторые переменные среды уже установлены.
Это дает вам полезную информацию, такую как количество процессоров, тип ОЗУ, имя компьютера, и так далее. Посмотрим, что мы сможем узнать о нашем компьютере:
Ваши данные будут отличаться от моих, так как конфигурация компьютера у всех немного отличается, однако вы определенно увидите большое количество совпадений. Как вы могли заметить, это вернуло словарь. Это значит, что вы можете получить доступ к значениям среды, пользуясь обычными словарными методами. Например:
Вы также можете использовать функцию os.getenv для доступа к этой переменной:
Полезность использования os.getenv() вместо словаря os.environ заключается в том, что если вы находитесь в положении, когда вам нужно получить доступ к переменной среды, которая не существует, функция getenv попросту ничего не сделает. Если вы попытаетесь сделать то же самое, пользуясь os.environ, вы получите уведомление об ошибке. Давайте попробуем на примере:
Результат выполнения данного скрипта:
Есть вопросы по Python?
На нашем форуме вы можете задать любой вопрос и получить ответ от всего нашего сообщества!
Telegram Чат & Канал
Вступите в наш дружный чат по Python и начните общение с единомышленниками! Станьте частью большого сообщества!
Паблик VK
Одно из самых больших сообществ по Python в социальной сети ВК. Видео уроки и книги для вас!
os.chdir() и os.getcwd()
Функция os.chdir позволяет нам вносить изменения в каталоге, который мы в данный момент используем в сессии. Если вам нужно знать, какой путь вы в данный момент используете, для этой нужно вызвать os.getcwd(). Попробуем воспользоваться обоими модулями:
Указанный код демонстрирует нам, что мы открыли директорию по умолчанию в Пайтоне, после запуска данного кода в IDLE. После этого мы изменили папки, при помощи os.chdir(). Наконец, мы вызывали os.getcwd() еще раз, чтобы убедиться, что все изменения были выполнены правильно.
os.mkdir() и os.makedirs()
Как вы могли догадаться, эти два метода используются для создания папок. Первая, os.mkdir(), позволяет создать одну папку. Попробуем:
Первая строка кода создает папку под названием test в определенном каталоге. Вы можете использовать эти модули в предыдущем разделе, чтобы узнать, где именно вы запустили свой код, на случай, если вы забыли. Во втором примере мы назначили путь к переменной, затем к os.mkdir(). Это позволяет вам создать папку в любой точке вашей системы, где есть доступ. Функция os.makedirs() создает промежуточные папки в пути, если их там нет. В целом, это значит, что вы создали путь, в котором размещены папки. Лично я часто прибегал к данному решению, когда была необходимость создания журнала, с датированной структурой, например Год\Месяц\День. Давайте взглянем на пример:
Что произошло? Этот код просто создал кучу папок! Если в вашей системе все еще есть папка pytest, то в ней появится папка 2014, в которой также есть папка, в которой, удивительно, находится еще одна. Попробуйте сами, воспользовавшись рабочим путем в вашей системе.