python:将os.Path代码转换为Pathlib代码
python: transforming os.Path code into Pathlib code
我在 python 中有以下功能,可以将字典作为行添加到 pandas 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
# ...
首先我不明白为什么路径库被支持os更好,其次我不明白如何翻译上面提到的行,即如何真正做到os.path.join(folder_path, 文件名) 带有路径库符号。
在路径库中,windows 和其他机器似乎有不同的方法,而且我也没有看到关于什么是 posix 路径的解释(文档 here).
任何人都可以帮助我os这两条线吗?
欢迎深入了解为什么使用 Pathlib 而不是 os.path。
谢谢
First I don't understand why path lib is supposed to be better.
pathlib
为 os.path 提供的相同功能提供面向对象的接口。使用 os.path
本质上没有错。在 pathlib 出现之前,我们(python 社区)一直在愉快地使用 os.path
。
但是,pathlib
确实让生活变得更简单。首先,正如 Henry Ecker 在评论中提到的那样,您处理的是路径对象,而不是字符串,因此在构建路径后您要做的错误检查较少,其次,路径对象的实例方法就在那里被使用。
Can anyone help me with those two lines?
使用你的例子:
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
在其余部分中具有一致的类型功能。
- child
Path
对象可以使用除法运算符 /
构造,这就是我为 total_file
所做的并且我实际上不需要包装 f'{filename}.{extension}'
在 Path
对象中。挺整洁的! reference
pandas.DataFrame.to_[filetype]
方法除路径字符串外都接受 Path
对象,因此您不必担心修改那部分代码。
In path lib it seems to be different approaches for windows and other machines, and also I don't see an explanation as to what is a posix path
如果你使用Path
对象,它将是跨平台的,你不必担心windows和posix路径。
我在 python 中有以下功能,可以将字典作为行添加到 pandas 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
# ...
首先我不明白为什么路径库被支持os更好,其次我不明白如何翻译上面提到的行,即如何真正做到os.path.join(folder_path, 文件名) 带有路径库符号。
在路径库中,windows 和其他机器似乎有不同的方法,而且我也没有看到关于什么是 posix 路径的解释(文档 here).
任何人都可以帮助我os这两条线吗? 欢迎深入了解为什么使用 Pathlib 而不是 os.path。 谢谢
First I don't understand why path lib is supposed to be better.
pathlib
为 os.path 提供的相同功能提供面向对象的接口。使用 os.path
本质上没有错。在 pathlib 出现之前,我们(python 社区)一直在愉快地使用 os.path
。
但是,pathlib
确实让生活变得更简单。首先,正如 Henry Ecker 在评论中提到的那样,您处理的是路径对象,而不是字符串,因此在构建路径后您要做的错误检查较少,其次,路径对象的实例方法就在那里被使用。
Can anyone help me with those two lines?
使用你的例子:
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
在其余部分中具有一致的类型功能。 - child
Path
对象可以使用除法运算符/
构造,这就是我为total_file
所做的并且我实际上不需要包装f'{filename}.{extension}'
在Path
对象中。挺整洁的! reference pandas.DataFrame.to_[filetype]
方法除路径字符串外都接受Path
对象,因此您不必担心修改那部分代码。
In path lib it seems to be different approaches for windows and other machines, and also I don't see an explanation as to what is a posix path
如果你使用Path
对象,它将是跨平台的,你不必担心windows和posix路径。