如何使用 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())
我正在尝试在 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())