Как нормализовать относительный путь, используя pathlib - PullRequest
1 голос
/ 26 мая 2019

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

Моя программа на Python находится в следующей папке:

G:\projects\code

Я хочу прочитать этот файл на один уровень выше:

G:\projects\data\sales.csv

Как мне указатьпуть, используя pathlib , что на один уровень выше моей текущей рабочей папки?Я не хочу менять текущую рабочую папку.

Я пробовал это:

from pathlib import Path
file = Path.cwd() /'..'/'data'/'sales.csv'

Но теперь переменная 'file' равна этому:

'G:/projects/code/../data/sales.csv'

Я прочитал документы илибо это не объясняется, либо я просто скучаю по нему.

Ответы [ 3 ]

2 голосов
/ 26 мая 2019

Хотя это не проблема, если ваш путь включает в себя «..» (вы все равно можете использовать этот путь для открытия файлов и т. Д. В Python), вы можете нормализовать путь, используя resolve():

from pathlib import Path
path = Path.cwd() / '..' / 'data' / 'sales.csv'
print(path)  # WindowsPath('G:/projects/code/../data/sales.csv')
print(path.resolve())  # WindowsPath('G:/projects/data/sales.csv')

Примечание: лично я бы назвал переменную, которая содержит путь path, а не file. Так что вы могли бы позже сделать file = open(path).

0 голосов
/ 26 мая 2019
print(
    Path(__file__).parent,  # the folder
    Path(__file__).parent.parent,  # the folder's parent
    sep='\n'
)

print(
    Path(
        Path(__file__).parent.parent, 'hello.py'
    )
)

приводит к

C:\Users\isik\Desktop\Python\MessAround\project\module
C:\Users\isik\Desktop\Python\MessAround\project
C:\Users\isik\Desktop\Python\MessAround\project\hello.py

с этой файловой структурой

-project
    -module
        -__init__.py
    -hello.py
    -__init__.py

, пока код находится внутри project.module.__init__.py

0 голосов
/ 26 мая 2019

Вы имеете в виду «читать мои CSV-файлы»?

Ключевое слово import имеет другое значение в Python (вы импортируете только другие модули Python).

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

import os
filePath = os.path.dirname(__file__)+'/../'+fileName
fileDesc = open(filePath)
fileData = fileDesc.read()
fileDesc.close()
...
...