Python:将os.Path代码转换为Pathlib代码

3

我在python中有以下函数,可以将字典添加为行到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
    # ...

首先,我不明白为什么路径库(pathlib)应该更好;其次,我不明白如何用路径库的符号表示法来实现上述提到的行,即如何使用路径库的符号(expressions)表示法来真正执行 os.path.join(folder_path, filename)。

在路径库中,似乎针对 Windows 和其他机器有不同的方法,也没有解释什么是 POSIX 路径(文档在此处here)。

有人可以帮我理解这两行内容吗? 欢迎分享使用路径库(pathlib)而不是 os.path 的见解。 谢谢


3
关于pathlib和os.path的关键区别在于,pathlib生成有用的对象,具有属性和方法来访问路径的相关部分,而os.path主要生成需要使用字符串方法解析的字符串(这可能很笨拙)。 - Henry Ecker
1个回答

3

首先,我不明白为什么应该使用 pathlib

pathlib 提供了一个面向对象的接口,实现了与 os.path 相同的功能。使用 os.path 并没有什么本质上的问题,Python 社区在 pathlib 出现之前一直愉快地使用 os.path

然而,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路径。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接