如何使用 pathlib 规范化相对路径

How to normalize a relative path using pathlib

我正在尝试在 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'

我通读了 docs,要么那里没有解释,要么我只是错过了它。

你是说 "read my csv files" 吗?

import 关键字在 Python 中有不同的含义(您只导入其他 Python 模块)。

无论如何,要读取位于 Python 文件上方一个文件夹的文件,您可以使用:

import os
filePath = os.path.dirname(__file__)+'/../'+fileName
fileDesc = open(filePath)
fileData = fileDesc.read()
fileDesc.close()
...
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

虽然你的路径包含'..'不是问题(你仍然可以使用这个路径在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).

这是我使用的示例:

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())