Что возвращает pathlib.Path.cwd ()? - PullRequest
0 голосов
/ 18 июня 2019

pathlib.Path.cwd () возвращает различное значение в зависимости от того, какой компьютер я использую (два компьютера с Windows - один на работе, другой дома).

Структура проекта (см. https://github.com/jonathanchukinas/file_read_exercise.git)

  • file_read_exercise /
    • bin /
      • init .py
      • read_excel_file.py
    • data /
      • init .y
      • my_data.xlsx
    • init .py
    • main.py

main.py и read_excel_file.py оба содержат: from pathlib import Path print(Path.cwd()) На работе каждый файл python возвращает абсолютный путь ккаталог верхнего уровня. Дома каждый файл python возвращает абсолютный путь к своему собственному каталогу.

Я просмотрел документацию, гуглил и искал переполнение стека и не могу найти ответна этот вопрос:

Как работает cwd (), чтобы я мог лучше прогнозировать его результаты?

Ответы [ 2 ]

2 голосов
/ 18 июня 2019

Возвращает текущий рабочий каталог, то есть каталог, из которого вы запускаете скрипт.

Пример:

  1. stradivari:~/Desktop/file_read_exercise$ python main.py

    Должен возвращать путь для ~/Desktop/file_read_exercise:

    cwd, when called from main, returns: /home/stradivari/Desktop/file_read_exercise
    
  2. stradivari:~/Desktop$ python ./file_read_exercise/main.py

    Должен возвращать путь к моему рабочему столу:

    cwd, when called from main, returns: /home/stradivari/Desktop
    
0 голосов
/ 18 июня 2019

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

import pathlib

def find_path_to_file(file_name):
    globa_path = pathlib.Path.home()
    for path in sorted(globa_path.rglob('*')):
            if str(file_name) in str(path):
                return str(path)

Также вы можете заменить home () на cwd (), если поместите эту функцию в ту же папку, где находится файл поиска, или попробуйте указать родительский аргумент:

def find_path_to_file(file_name):
    global_path = pathlib.Path.cwd()
    for path in sorted(global_path.rglob('*')):
            if str(file_name) in str(path):
                return str(path)
            else:
                for path in sorted(global_path.parent.parent.rglob('*')):
                    if str(file_name) in str(path):
                        return str(path)
...