'How to normalize a relative path using pathlib

I'm trying to use relative paths in Python, and I want to put my csv files in a separate folder from my python code.

My python program is in the following folder:

G:\projects\code

I want to read this file which is one level up:

G:\projects\data\sales.csv

How do I specify a path using pathlib that is one level up from my current working folder? I don't want to change the current working folder.

I tried this:

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

But now the 'file' variable equals this:

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

I read through the docs and either it isn't explained there or I'm just missing it.



Solution 1:[1]

print(
    Path(__file__).parent,  # the folder
    Path(__file__).parent.parent,  # the folder's parent
    sep='\n'
)

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

results in

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

with this file structure

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

while the code is located inside project.module.__init__.py

Solution 2:[2]

Do you mean "read my csv files"?

The import keyword has a different meaning in Python (you import only other Python modules).

In any case, in order to read a file located one folder above your Python file, you can use this:

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

Solution 3:[3]

here is an example I used:

import json
from pathlib import Path

def read_files(folder_name, file_name):
    base_path = Path.cwd().joinpath('configs','resources')
    path = base_path.joinpath(folder_name,file_name)
    open_file = open(path,'r')
    return json.load(open_file.read())

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Işık Kaplan
Solution 2 goodvibration
Solution 3 S.B