Os getcwd не работает

Содержание
  1. Python os.getcwd() не работает с подпапками в VSCODE
  2. 5 ответов
  3. Python | метод os.getcwd ()
  4. Python-сообщество
  5. Уведомления
  6. #1 Сен. 11, 2012 17:40:06
  7. os.getcwd() разные слеши в разных осях
  8. #2 Сен. 11, 2012 17:51:00
  9. os.getcwd() разные слеши в разных осях
  10. #3 Сен. 11, 2012 19:25:29
  11. os.getcwd() разные слеши в разных осях
  12. #4 Сен. 12, 2012 22:06:36
  13. os.getcwd() разные слеши в разных осях
  14. #5 Сен. 13, 2012 06:14:16
  15. os.getcwd() разные слеши в разных осях
  16. #6 Сен. 13, 2012 06:17:49
  17. os.getcwd() разные слеши в разных осях
  18. #7 Сен. 13, 2012 13:29:24
  19. os.getcwd() разные слеши в разных осях
  20. #8 Сен. 13, 2012 17:39:48
  21. os.getcwd() разные слеши в разных осях
  22. Работа с файлами в Python с помощью модуля OS
  23. Вывод текущей директории
  24. Создание папки
  25. Изменение директории
  26. Создание вложенных папок
  27. Создание файлов
  28. Переименование файлов
  29. Перемещение файлов
  30. Список файлов и директорий
  31. Удаление файлов
  32. Удаление директорий
  33. Получение информации о файлах
  34. Примеры использования модуля os в Python
  35. os.name
  36. os.environ, os.getenv() и os.putenv()
  37. os.chdir() и os.getcwd()
  38. os.mkdir() и os.makedirs()

Python os.getcwd() не работает с подпапками в VSCODE

У меня есть файл python, преобразованный из Jupiter Notebook, и внутри этой файловой папки есть подпапка под названием «наборы данных». Когда я пытаюсь открыть файл, который находится внутри этой папки с наборами данных, с помощью этого кода:

Там написано, что такого файла или папки нет. Затем я добавляю эту строку

И вывод — это папка верхнего уровня проекта, а не подпапка, когда это файл python. И я думаю, что, возможно, именно поэтому он не работает.

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

Читайте также:  Не работает электропила парма

Почему os.getcwd() не получает фактический путь к папке?

5 ответов

Мое наблюдение, точка (.) Для перехода в родительский каталог иногда не работает в зависимости от операционной системы. Что я обычно делаю, чтобы сделать его агностиком, так это:

Это одинаково хорошо работает на моих окнах и машине ubantu. Я не уверен, есть ли другие и лучшие способы добиться этого. Хотел бы услышать ответ, если есть.

Согласно вашему комментарию ниже, текущий рабочий каталог

пока файл находится в

По этой причине переход на datasets подпапка текущего рабочего каталога (CWD) приведет вас к /Users/ivanparra/AprendizajePython/datasets который либо не существует, либо не содержит искомого файла.

Вы можете сделать одно из двух:

(1) Используйте абсолютный путь к файлу, как в

(2) используйте правильный относительный путь, как в

Источник

Python | метод os.getcwd ()

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

Parameter: No parameter is required.

Return Value: This method returns a string which represents the current working directory.

Пример № 1:

Использование os.getcwd() для получения текущего рабочего каталога

# Python программа для объяснения метода os.getcwd ()

# импорт модуля os

# Получить текущую работу
# каталог (CWD)

# Распечатать текущую работу
# каталог (CWD)

print ( «Current working directory:» , cwd)

Выход:

Пример № 2:
Использование os.getcwd() для получения текущего рабочего каталога GeeksforGeeks, который является корневым

# Python программа для объяснения метода os.getcwd ()

# импорт модуля os

# Получить текущую работу
# каталог (CWD)

# Распечатать текущую работу
# каталог (CWD)
# который в данном случае является root

print ( «Current working directory:» , cwd)

Источник

Python-сообщество

Уведомления

#1 Сен. 11, 2012 17:40:06

os.getcwd() разные слеши в разных осях

Отредактировано agryn (Сен. 11, 2012 17:41:43)

#2 Сен. 11, 2012 17:51:00

os.getcwd() разные слеши в разных осях

А вообще, если файл лежит в каталоге со скриптом, и скрипт запускается из него, то

#3 Сен. 11, 2012 19:25:29

os.getcwd() разные слеши в разных осях

А вообще есть такая вещь как settings.py/config.py, всё делается просто импортом.

#4 Сен. 12, 2012 22:06:36

os.getcwd() разные слеши в разных осях

Тут можно взять “правильный” слеш:

а вообще вроде под виндой питон нормально работает с “/” (как и в nix/mac), на py 2,6 проверял, но лучше юзать os.sep

#5 Сен. 13, 2012 06:14:16

os.getcwd() разные слеши в разных осях

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

#6 Сен. 13, 2012 06:17:49

os.getcwd() разные слеши в разных осях

fata1ex
А вообще есть такая вещь как settings.py/config.py, всё делается просто импортом.

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

#7 Сен. 13, 2012 13:29:24

os.getcwd() разные слеши в разных осях

И ловим факап на двойке, если в пути есть символы, которых нет в текущей кодовой таблице, т.к. sys.argv в двойке — str (я юзал sys.argv, буду считать, что это одно и то же).

Я читал, что __file__ не везде работает. И что лучше — dirname или abspath? Какой самый корректный вариант открытия файлов в каталоге програмы?

o7412369815963
а вообще вроде под виндой питон нормально работает с “/” (как и в nix/mac), на py 2,6 проверял, но лучше юзать os.sep

#8 Сен. 13, 2012 17:39:48

os.getcwd() разные слеши в разных осях

odnochlen
Я читал, что __file__ не везде работает. И что лучше — dirname или abspath? Какой самый корректный вариант открытия файлов в каталоге програмы?

На выходе Юникодовый путь до папки с программой, даже если это .exe сделанный cxFreeze и т.п.

odnochlen
Вопрос в догонку — а можно ли в конфигах сохранять пути с сепаратором, или надо мудрячить с os.path.join

os.path.normpath(path)
Normalize a pathname. This collapses redundant separators and up-level references so that A//B, A/B/, A/./B and A/foo/../B all become A/B.

It does not normalize the case (use normcase() for that). On Windows, it converts forward slashes to backward slashes. It should be understood that this may change the meaning of the path if it contains symbolic links!

Но Win нормально с ‘/’ работает.

Отредактировано reclosedev (Сен. 13, 2012 17:40:32)

Источник

Работа с файлами в Python с помощью модуля OS

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

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

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

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

Вывод текущей директории

Для получения текущего рабочего каталога используется os.getcwd() :

os.getcwd() возвращает строку в Юникоде, представляющую текущий рабочий каталог. Вот пример вывода:

Создание папки

Для создания папки/каталога в любой операционной системе нужна следующая команда:

После ее выполнения в текущем рабочем каталоге тут же появится новая папка с названием «folder».

Если запустить ее еще раз, будет вызвана ошибка FileExistsError , потому что такая папка уже есть. Для решения проблемы нужно запускать команду только в том случае, если каталога с таким же именем нет. Этого можно добиться следующим образом:

Функция os.path.isdir() вернет True , если переданное имя ссылается на существующий каталог.

Изменение директории

Менять директории довольно просто. Проделаем это с только что созданным:

Еще раз выведем рабочий каталог:

Создание вложенных папок

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

Это создаст три папки рекурсивно, как показано на следующем изображении:

Создание файлов

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

w значит write (запись), a — это appending (добавление данных к уже существующему файлу), а r — reading (чтение). Больше о режимах открытия можно почитать здесь.

Переименование файлов

С помощью модуля os достаточно просто переименовать файл. Поменяем название созданного в прошлом шаге.

Функция os.rename() принимает 2 аргумента: имя файла или папки, которые нужно переименовать и новое имя.

Перемещение файлов

Функцию os.replace() можно использовать для перемещения файлов или каталогов:

Стоит обратить внимание, что это перезапишет путь, поэтому если в папке folder уже есть файл с таким же именем ( renamed-text.txt ), он будет перезаписан.

Список файлов и директорий

Функция os.listdir() возвращает список, который содержит имена файлов в папке. Если в качестве аргумента не указывать ничего, вернется список файлов и папок текущего рабочего каталога:

А что если нужно узнать состав и этих папок тоже? Для этого нужно использовать функцию os.walk() :

os.walk() — это генератор дерева каталогов. Он будет перебирать все переданные составляющие. Здесь в качестве аргумента передано значение «.», которое обозначает верхушку дерева:

Метод os.path.join() был использован для объединения текущего пути с именем файла/папки.

Удаление файлов

Удалим созданный файл:

os.remove() удалит файл с указанным именем (не каталог).

Удаление директорий

С помощью функции os.rmdir() можно удалить указанную папку:

Для удаления каталогов рекурсивно необходимо использовать os.removedirs() :

Это удалит только пустые каталоги.

Получение информации о файлах

Для получения информации о файле в ОС используется функция os.stat() , которая выполняет системный вызов stat() по выбранному пути:

Это вернет кортеж с отдельными метриками. В их числе есть следующие:

    • st_size — размер файла в байтах
    • st_atime — время последнего доступа в секундах (временная метка)
    • st_mtime — время последнего изменения
    • st_ctime — в Windows это время создания файла, а в Linux — последнего изменения метаданных

Для получения конкретного атрибута нужно писать следующим образом:

Источник

Примеры использования модуля 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, в которой также есть папка, в которой, удивительно, находится еще одна. Попробуйте сами, воспользовавшись рабочим путем в вашей системе.

Источник

Оцените статью