python - python:将 os.Path 代码转换为 Pathlib 代码
问题描述
我在 python 中有以下函数,可以将 dict 作为行添加到 pandas DF,如果还没有创建第一个空 DF,它还负责创建第一个空 DF。我使用库 os 但我想更改为 Pathlib,因为我咨询了我公司的软件开发人员,有人说我应该使用 pathlib 而不是 os.Path 来解决这些问题。(注意,我没有CS背景)
def myfunc(dictt,filename, folder='', extension='csv'):
if folder == '':
folder = os.getcwd(). #---> folder = Path.cwd()
filename = filename + '.' + 'csv'
total_file = os.path.join(folder,filename) #<--- this is what I don't get translated
# check if file exists, otherwise create it
if not os.path.isfile(total_file):#<----- if total file is a Path object: totalfile.exists()
df_empty = pd.DataFrame()
if extension=='csv':
df_empty.to_csv(total_file)
elif extension=='pal':
df_empty.to_pkl(total_file)
else:
#raise error
pass
# code to append the dict as row
# ...
首先我不明白为什么 path lib 应该更好,其次我不明白如何翻译上面提到的行,即如何真正使用 pathlib 表示法执行 os.path.join(folder_path, filename)。
在路径库中,对于 Windows 和其他机器来说,它似乎是不同的方法,而且我也没有看到关于什么是 posix 路径的解释(docs here)。
谁能帮我解决这两条线?欢迎提供关于为什么使用 Pathlib 而不是 os.path 的见解。谢谢
解决方案
首先,我不明白为什么 path lib 应该更好。
pathlib
为 os.path 提供的相同功能提供面向对象的接口。使用os.path
. os.path
在 pathlib 出现之前,我们(python 社区)一直在愉快地使用。
然而,pathlib
确实让生活更简单。首先,正如 Henry Ecker 的评论中所提到的,您正在处理路径对象,而不是字符串,因此在构建路径后您要做的错误检查更少,其次,路径对象的实例方法就在那里使用。
谁能帮我解决这两条线?
使用您的示例:
def mypathlibfunc(dictt, filename, folder='', extension='csv'):
if folder == '':
folder = pl.Path.cwd()
else:
folder = pl.Path(folder)
total_file = folder / f'{filename}.{extension}'
if not total_file.exists():
# do your thing
df_empty = pd.DataFrame()
if extension == 'csv':
df_empty.to_csv(total_file)
elif extension == 'pal':
df_empty.to_pickle(total_file)
笔记:
- 如果您的函数是用 调用的
folder != ''
,则正在从中构建一个Path
对象,这是为了确保folder
在函数的其余部分具有一致的类型。 Path
可以使用除法运算符构造子对象/
,这是我所做的total_file
,我实际上并不需要包装f'{filename}.{extension}'
在Path
对象中。漂亮整齐!参考pandas.DataFrame.to_[filetype]
除了路径字符串之外,所有方法都接受一个Path
对象,因此您不必担心修改代码的那部分。
在路径库中,对于 Windows 和其他机器来说,它似乎是不同的方法,而且我也没有看到关于什么是 posix 路径的解释
如果您使用该Path
对象,它将是跨平台的,您不必担心 windows 和 posix 路径。
推荐阅读
- javascript - FileReader 返回未定义
- vba - 复制/粘贴 - 下标超出范围错误
- matlab - MATLAB 用给定的向量减去矩阵的每一行
- javascript - jquery将日期转换为格式化日期
- angular - 当我从打字稿传递条件时,ngIf 和 hidden 不是绑定属性
- gcc - 哪个 gfortran 编译器标志与警告“非法预处理器指令”相关联?
- image - create-react-app:我在哪里放置动态上传的图片?
- java - mavlink 或任何其他无线协议如何与软件一起使用?
- python - Django Rest Framework 使用“permissions.IsAuthenticated”会引发错误
- android - 使用“复制代码”按钮发送包含验证码的短信