Как указать путь к файлу в python windows

Начиная с версии Python 3.4, для задания пути к файлу рекомендуется использовать модуль pathlib с классом Path. Определить путь к рабочей директории..
путь к файлу в Python

Как задать путь к файлу в Python?

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

Самый простой вариант — не самый верный!

Внимание! У этого способа обнаружен недостаток!

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

Пример относительного пути:
path = "Files/info.txt" # в Линуксе, или:
path = "Filesinfo.txt" # в Windows

Где вместо «Files» и «info.txt» Вы напишите названия ваших директорий и имя вашего файла соответственно.

Пример абсолютного пути:
path = "/home/my_comp/Files/info.txt" # для Линукс, или:
path = "C:Pythonpythonw.exeFilesinfo.txt" # для Windows

Где вместо «C:Pythonpythonw.exeFilesinfo.txt», «home/my_comp/Files/» и «info.txt» Вы напишите названия ваших директорий и имя вашего файла соответственно.

Этот вариант рабочий, однако, один существенный недостаток лишил его внимания разработчиков. Проблема заключается в том, что заданные таким способом пути адаптированы только к одному виду операционной системы: к Линукс, либо к Windows, так как в Windows используются обратные слеши «», а в Линукс — обычные «/». Из-за этого скрипт, показывавший отличные результаты в Windows, начнет жаловаться на отсутствие файлов по прописанному пути в Linux, и наоборот. А с абсолютным путем вообще все сложно: никакого диска «C:» в Линуксе нет. Скрипт опять будет ругаться! Что же делать? Правильно указать путь к файлу!

Указываем путь к файлу правильно!

Внимание! Годный вариант!

Python — умный змей, поэтому в его арсенале, начиная с 3.4 версии появился модуль pathlib, который позволяет вытворять самые приятные вещи с путями к файлу, стоит только импортировать его класс Path:

import pathlib
from pathlib import Path

Кстати, если у вас не установлен модуль pathlib, это легко исправить с помощью команды:

pip install pathlib

Задаем относительный путь с помощью Path!

После того, как класс импортирован, мы получаем власть над слешами! Теперь вопрос о прямых и обратных слешах в разных операционных системах ложится на плечи Path. Используя Path, вы можете корректно задать относительный путь, который будет работать в разных системах.

Например, в случае расположения файлов, как на представленном изображении, относительный путь, определяемый в скрипте «main_script.py», сформируется автоматически из перечисленных в скобках составных частей. Pathlib инициализирует новый объект класса Path, содержимым которого станет сформированный для Вашей системы относительный путь (в Windows части пути будут разделены обратными слешами, в Linux — обычными):

import pathlib
from pathlib import Path  
path = Path("files", "info", "docs.txt") 

## выведем значение переменной path:
print(str(path))
## выведем значение переменной path:
files/info/docs.txt  

У нас появился Telegram-канал для изучающих Python! Канал совсем свежий, подпишись одним из первых, ведь вместе «питонить» веселее! 😉 Ссылка на канал: «Кодим на Python!»

Задаем абсолютный путь с помощью Path

  • cwd() — возвращает путь к рабочей директории
  • home() — возвращает путь к домашней директории

Полученную строку, содержащую путь к рабочей или домашней директории, объединим с недостающими участками пути при инициализации объекта класса Path :

Пример 1: с использованием функции cwd():
import pathlib
from pathlib import Path

#Получаем строку, содержащую путь к рабочей директории:
dir_path = pathlib.Path.cwd()

# Объединяем полученную строку с недостающими частями пути
path = Path(dir_path, 'files','info', 'docs.txt')

# выведем значение переменной path:
print(str(path))
# выведем значение переменной path:
"/home/my_comp/python/files/info/docs.txt"

В данном случае путь к директории имеет вид: dir_path = «/home/my_comp/python», а полный путь к файлу «docs.txt» будет иметь вид: «/home/my_comp/python/files/info/docs.txt».

Представленный выше код можно оптимизировать и записать в одну строку:

import pathlib
from pathlib import Path
path = Path(pathlib.Path.cwd(), 'files', 'info', 'docs.txt')

# значение переменной path:
print(str(path))
# значение переменной path:
"/home/my_comp/python/files/info/docs.txt"
Пример2: с использованием функции home():
import pathlib
from pathlib import Path

#Получаем строку, содержащую путь к домашней директории:
dir_path = pathlib.Path.home()

# Объединяем полученную строку с недостающими частями пути
path = Path(dir_path, 'files','info', 'docs.txt')

# Выведем значение переменной path:
print(str(path))
# Выведем значение переменной path:
"/home/my_comp/files/info/docs.txt"

В данном случае путь к директории имеет вид: dir_path = «/home/my_comp», а полный путь к файлу ‘docs.txt’ будет иметь вид: «/home/my_comp/files/info/docs.txt».

Сократим представленный выше код:

import pathlib
from pathlib import Path
path = Path(pathlib.Path.home(), 'files', 'info', 'docs.txt')

# Значение переменной path:
print(str(path))
# Значение переменной path:
"/home/my_comp/files/info/docs.txt"

Подведем итог: начиная с версии Python 3.4, для задания пути к файлу рекомендуется использовать модуль pathlib с классом Path. Определить путь к рабочей директории можно с помощью функции cwd(), а путь к домашней директории подскажет функция home().

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

Предупреждение. Сразу оговоримся, чтобы не получить геморрой при составлении путей к файлам с системе Windows используйте встроенный модуль pathlib.

# Unix
/path/to/file/text.txt

# Windows
c:pathtofiletext.txt

Он разбит на три основные части:

  1. Путь к файлу /path/to/file/: расположение директории в файловой системе, где папки разделены прямой косой чертой '/' в Unix подобных системах или обратной косой чертой '' в Windows.
  2. Имя файла text: фактическое имя файла.
  3. Расширение .txt: используется для указания типа файла.

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

>>> full_path = '/path/to/file/text.txt'
>>> print(full_path)
# /path/to/file/text.txt

В системе Windows путь включает в себя обратную косую черту ''. Этот символ в строках на Python используется для экранирования escape-последовательностей, таких как новая строка 'n'.

>>> full_path = 'c:pathtofiletext.txt'
>>> print(full_path)
# c:path o
#          ile    ext.txt

Что бы избежать Windows системах такого безобразия, нам нужно вручную экранировать обратную косую черту '\' или передавать в функции open() сырую (необработанную) строку, указав перед первой кавычкой строковой литерал 'r':

# экранируем обратную косую черту
>>> full_path = 'c:\path\to\file\text.txt'
>>> print(full_path)
# c:pathtofiletext.txt

# строковой литерал raw строки
>>> full_path = r'c:pathtofiletext.txt'
>>> print(full_path)
# c:pathtofiletext.txt

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

Строковое представление пути можно посмотреть функцией str() — это сам необработанный путь к файловой системе в собственном виде, например с обратным слешем в Windows, который можно передать любой функции, принимающей путь к файлу в виде строки:

>>> import pathlib

# Код запущен на Unix системах
>>> path = pathlib.Path('/foo', 'bar', 'baz')
>>> path
# PosixPath('/foo/bar/baz')
>>> str(path)
# '/foo/bar/baz'

# Код запущен на Windows системе
>>> path = pathlib.Path('c:/', 'foo', 'bar')
>>> path
# WindowsPath('c:/foo/bar')

# Строковое представление пути
# экранирование происходит автоматически
>>> str(path)
# 'c:\foo\bar'

Переводить путь в текстовое представление не обязательно, т.к. объект пути модуля pathlib принимают все функции.

Оператор косой черты помогает создавать дочерние пути, аналогично os.path.join():

>>> import pathlib
# Сложение путей файловой системы
>>> p = pathlib.Path('/etc')
>>> p
# PosixPath('/etc')
>>> p1 = p / 'init.d' / 'apache2'
>>> p1
# PosixPath('/etc/init.d/apache2')
>>> q = pathlib.Path('bin')
>>> q1 = '/usr' / q
>>> q1
# PosixPath('/usr/bin')
# разложение пути
>>> p = pathlib.Path('c:/Program Files/PSF')
>>> p.parts
# ('c:\', 'Program Files', 'PSF')
>>> p.is_dir()
# True

# определение диска
>>> pathlib.Path('c:/Program Files/').drive
# 'c:'
>>> pathlib.Path('/Program Files/').drive
# ''

# определение родительской директории
>>> p = pathlib.Path('c:/foo/bar/setup.py')
>>> p.is_file()
# True
>>> p.parents[0]
# WindowsPath('c:/foo/bar')
>>> p.parents[1]
# WindowsPath('c:/foo')
>>> p.parents[2]
# WindowsPath('c:/')

# Двигаемся вверх по директории
>>> for up in p.parents:
...     print(up)
... 
# c:foobar
# c:foo
# c:

Как задать путь к файлу в Python?

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

Самый простой вариант — не самый верный!

Внимание! У этого способа обнаружен недостаток!

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

Пример относительного пути:

Где вместо «Files» и «info.txt» Вы напишите названия ваших директорий и имя вашего файла соответственно.

Пример абсолютного пути:

Где вместо «C:Pythonpythonw.exeFilesinfo.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/my_comp/python», а полный путь к файлу «docs.txt» будет иметь вид: «/home/my_comp/python/files/info/docs.txt».

Представленный выше код можно оптимизировать и записать в одну строку:

Пример2: с использованием функции home():

В данном случае путь к директории имеет вид: dir_path = «/home/my_comp», а полный путь к файлу ‘docs.txt’ будет иметь вид: «/home/my_comp/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 в определённую папку?

Начал изучать Python по книге Abyteofpython там была задача сделать телефонную книгу, решил дополнить её так, что бы он сохранял текстовый документ в определённую папку. Может какие библиотеки есть для этого?

user avatar

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками python или задайте свой вопрос.

Site design / logo © 2022 Stack Exchange Inc; user contributions licensed under cc by-sa. rev 2022.6.10.42345

Нажимая «Принять все файлы cookie», вы соглашаетесь, что Stack Exchange может хранить файлы cookie на вашем устройстве и раскрывать информацию в соответствии с нашей Политикой в отношении файлов cookie.

Путь сохранения по умолчанию для Python IDLE?

кто-нибудь знает, где и как установить путь/каталог по умолчанию для сохранения скриптов python перед запуском?

на Mac он хочет сохранить их на верхнем уровне

/Documents directory . Я хотел бы указать реальное местоположение. Есть идеи?

9 ответов

на OS X, если вы запустите IDLE.app (двойным щелчком мыши или с помощью open(1) , например), каталог по умолчанию подключается к

/Documents . Если вы хотите изменить значение по умолчанию навсегда, вам нужно отредактировать файл idlemain.py в режиме ожидания.App application bundle; в зависимости от того, какой Python(ы) вы установили, он, вероятно, будет в одном из:

С другой стороны, если вы запускаете IDLE из командной строки, например, с:

IDLE будет использовать этот текущий каталог по умолчанию.

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

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

Я просто рад слышать, что у других людей есть эта проблема. Я просто думала, что веду себя глупо.

Я на самом деле только что обнаружил самый простой ответ, если вы используете ссылку ярлыка с надписью «IDLE (Python GUI)». Это в Windows Vista, поэтому я не знаю, будет ли он работать в других ОС.

1) Щелкните правой кнопкой «свойства».

2) Выберите вкладку» Ярлык».

3) В «В», укажите путь к файлу (например, «C:Users. «).

позвольте мне знать, если это работает!

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

File — > Open, чтобы открыть файл. И установите текущий рабочий каталог.

в Windows (Vista, по крайней мере, то, что я смотрю здесь), ярлыки на рабочем столе имеют поле «Пуск В», где вы можете установить каталог, используемый в качестве текущего рабочего каталога при запуске программы. Изменение этого работает для меня. Что-нибудь подобное на Mac? (Запуск в нужном каталоге из командной строки тоже работает.)

откройте новое окно finder, затем перейдите к приложениям. Найдите приложение Python. (Для моего mac это Python 3.5)

дважды щелкните по нему. Щелкните правой кнопкой мыши на значке IDLE, покажите содержимое пакета. Затем перейдите в папку contents, затем resources.

это важно:

(Примечание: Вы должны быть администратором или иметь пароль администратора для ниже)

право нажмите на кнопку idlemain.py получить информацию.

прокрутите весь путь вниз. Убедитесь, что на вкладке » общий доступ и разрешения «ваше»имя» (Me) находится на нем с привилегией «чтение и запись». Если не нажать на символ блокировки и разблокировать его. Затем добавьте / отредактируйте себя, чтобы иметь привилегию чтения и записи.

наконец,согласно инструкциям Неда Дейли, отредактируйте строку:

с желаемым путем, а затем сохраните изменения.

при перезапуске Python IDLE вы должны найти, что по умолчанию Сохранить как путь, который вы указали.

Если вы найдете каталог idlelib в вашей установке Python, у него будет несколько файлов с .расширение def. config-main.def имеет инструкции о том, куда поместить пользовательские файлы конфигурации. Однако, просматривая их, я не нашел настраиваемых путей (ваша установка может отличаться). Похоже, вам может понадобиться взломать код редактора, чтобы изменить его.

в моем случае каталог по умолчанию установлен в каталог, из которого я запустил IDLE. Например, если я запустил IDLE из каталога с именем » tmp » в моем домашнем каталоге, путь сохранения по умолчанию установлен в

/tmp . Так что начните свой простоя так:

Я использую windows 7 и, перейдя в Start — > IDLE (Python 3.6 32-бит)

нажмите на свойства, а затем на вкладке Ярлык перейдите к Начните и введите желаемый путь работал для меня обратите внимание, если простоя открыт и работает в то время как вы делаете это, вам придется закрыть его и перезапустить его для этого работать

Given a path such as "mydir/myfile.txt", how do I find the file’s absolute path in Python? E.g. on Windows, I might end up with:

"C:/example/cwd/mydir/myfile.txt"

Marc Compere's user avatar

asked Sep 9, 2008 at 10:19

izb's user avatar

0

>>> import os
>>> os.path.abspath("mydir/myfile.txt")
'C:/example/cwd/mydir/myfile.txt'

Also works if it is already an absolute path:

>>> import os
>>> os.path.abspath("C:/example/cwd/mydir/myfile.txt")
'C:/example/cwd/mydir/myfile.txt'

JakeD's user avatar

JakeD

2,6331 gold badge19 silver badges28 bronze badges

answered Sep 9, 2008 at 10:21

sherbang's user avatar

sherbangsherbang

15.5k1 gold badge22 silver badges16 bronze badges

8

You could use the new Python 3.4 library pathlib. (You can also get it for Python 2.6 or 2.7 using pip install pathlib.) The authors wrote: «The aim of this library is to provide a simple hierarchy of classes to handle filesystem paths and the common operations users do over them.»

To get an absolute path in Windows:

>>> from pathlib import Path
>>> p = Path("pythonw.exe").resolve()
>>> p
WindowsPath('C:/Python27/pythonw.exe')
>>> str(p)
'C:\Python27\pythonw.exe'

Or on UNIX:

>>> from pathlib import Path
>>> p = Path("python3.4").resolve()
>>> p
PosixPath('/opt/python3/bin/python3.4')
>>> str(p)
'/opt/python3/bin/python3.4'

Docs are here: https://docs.python.org/3/library/pathlib.html

Martijn Pieters's user avatar

answered Oct 24, 2014 at 1:05

twasbrillig's user avatar

twasbrilligtwasbrillig

16.1k9 gold badges40 silver badges62 bronze badges

4

import os
os.path.abspath(os.path.expanduser(os.path.expandvars(PathNameString)))

Note that expanduser is necessary (on Unix) in case the given expression for the file (or directory) name and location may contain a leading ~/(the tilde refers to the user’s home directory), and expandvars takes care of any other environment variables (like $HOME).

answered Mar 7, 2019 at 0:56

benjimin's user avatar

benjiminbenjimin

3,61527 silver badges41 bronze badges

1

Install a third-party path module (found on PyPI), it wraps all the os.path functions and other related functions into methods on an object that can be used wherever strings are used:

>>> from path import path
>>> path('mydir/myfile.txt').abspath()
'C:\example\cwd\mydir\myfile.txt'

wim's user avatar

wim

323k97 gold badges584 silver badges719 bronze badges

answered Sep 12, 2008 at 6:53

Tom's user avatar

TomTom

41.7k33 gold badges94 silver badges101 bronze badges

5

Update for Python 3.4+ pathlib that actually answers the question:

from pathlib import Path

relative = Path("mydir/myfile.txt")
absolute = relative.absolute()  # absolute is a Path object

If you only need a temporary string, keep in mind that you can use Path objects with all the relevant functions in os.path, including of course abspath:

from os.path import abspath

absolute = abspath(relative)  # absolute is a str object

answered Dec 27, 2018 at 20:41

Mad Physicist's user avatar

Mad PhysicistMad Physicist

104k25 gold badges174 silver badges257 bronze badges

This always gets the right filename of the current script, even when it is called from within another script. It is especially useful when using subprocess.

import sys,os

filename = sys.argv[0]

from there, you can get the script’s full path with:

>>> os.path.abspath(filename)
'/foo/bar/script.py'

It also makes easier to navigate folders by just appending /.. as many times as you want to go ‘up’ in the directories’ hierarchy.

To get the cwd:

>>> os.path.abspath(filename+"/..")
'/foo/bar'

For the parent path:

>>> os.path.abspath(filename+"/../..")
'/foo'

By combining "/.." with other filenames, you can access any file in the system.

answered Feb 28, 2019 at 15:26

Lucas Azevedo's user avatar

3

You can use this to get absolute path of a specific file.

from pathlib import Path

fpath = Path('myfile.txt').absolute()

print(fpath)

answered Aug 30, 2021 at 14:44

Dhia Shalabi's user avatar

Dhia ShalabiDhia Shalabi

1,24011 silver badges25 bronze badges

1

Given a path such as mydir/myfile.txt, how do I find the file’s absolute path relative to the current working directory in Python?

I would do it like this,

import os.path
os.path.join( os.getcwd(), 'mydir/myfile.txt' )

That returns '/home/ecarroll/mydir/myfile.txt'

answered Feb 8, 2022 at 6:20

Evan Carroll's user avatar

Evan CarrollEvan Carroll

75.9k45 gold badges251 silver badges443 bronze badges

if you are on a mac

import os
upload_folder = os.path.abspath("static/img/users")

this will give you a full path:

print(upload_folder)

will show the following path:

>>>/Users/myUsername/PycharmProjects/OBS/static/img/user

answered Apr 3, 2018 at 21:12

chikwapuro's user avatar

chikwapurochikwapuro

1,3281 gold badge9 silver badges10 bronze badges

1

In case someone is using python and linux and looking for full path to file:

>>> path=os.popen("readlink -f file").read()
>>> print path
abs/path/to/file

answered Jul 4, 2018 at 19:09

BND's user avatar

BNDBND

5729 silver badges21 bronze badges

Понравилась статья? Поделить с друзьями:
  • Как узнать что на пк вирус windows 10
  • Как указать путь к резервной копии в itunes windows 10
  • Как узнать что мешает загрузке windows
  • Как указать путь к драйверу на windows 10
  • Как узнать что лишнее в папке windows