我在python中有以下函数来向熊猫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
# ...首先,我不明白为什么路径库应该更好,其次,我不知道如何翻译上面提到的行,即如何使用路径库表示法来真正完成os.path.join(folder_path,filename)。
在path库中,对于windows和其他机器,它似乎是不同的方法,而且对于什么是posix路径(docs 这里),我也没有看到任何解释。
有人能帮我解决这两条线吗?欢迎深入了解为什么使用Pathlib而不是os.path。谢谢
发布于 2021-10-31 19:54:41
首先,我不明白为什么路径库应该更好。
pathlib为os.path提供的相同功能提供了一个面向对象的接口。使用os.path并没有本质上的错误。在路径库出现之前,我们( python社区)一直愉快地使用os.path。
然而,pathlib确实使生活变得更简单。第一,正如Henry在注释中提到的,您处理的是路径对象,而不是字符串,因此在构建路径之后,您可以少做错误检查,其次,path对象的实例方法就在这里可以使用。
有人能帮我解决这两条线吗?
使用您的例子:
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对象,因此您不必担心修改代码的这一部分。在path lib中,对于windows和其他机器,它似乎是不同的方法,而且对于posix路径是什么,我也没有看到任何解释。
如果您使用Path对象,它将是跨平台的,您不必担心windows & posix路径。
https://stackoverflow.com/questions/69787664
复制相似问题