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路径。