【问题标题】:How to normalize a relative path using pathlib如何使用 pathlib 规范化相对路径
【发布时间】:2019-10-12 07:22:41
【问题描述】:

我正在尝试在 Python 中使用相对路径,并且我想将我的 csv 文件放在与我的 Python 代码不同的文件夹中。

我的python程序在以下文件夹中:

G:\projects\code

我想阅读这个上一级的文件:

G:\projects\data\sales.csv

如何使用 pathlib 指定比当前工作文件夹高一级的路径?我不想更改当前的工作文件夹。

我试过这个:

from pathlib import Path
file = Path.cwd() /'..'/'data'/'sales.csv'

但现在“文件”变量等于:

'G:/projects/code/../data/sales.csv'

我通读了docs,要么那里没有解释,要么我只是想念它。

【问题讨论】:

  • 有问题吗?路径应该仍然正确。
  • 如果您想从不同的文件夹运行,请使用 __file__ 而不是 Path.cwd()。

标签: python python-3.x pathlib


【解决方案1】:

您的意思是“读取我的 csv 文件”吗?

import 关键字在 Python 中具有不同的含义(您只导入其他 Python 模块)。

在任何情况下,为了读取位于 Python 文件上方一个文件夹的文件,您可以使用以下命令:

import os
filePath = os.path.dirname(__file__)+'/../'+fileName
fileDesc = open(filePath)
fileData = fileDesc.read()
fileDesc.close()
...

【讨论】:

    【解决方案2】:
    print(
        Path(__file__).parent,  # the folder
        Path(__file__).parent.parent,  # the folder's parent
        sep='\n'
    )
    
    print(
        Path(
            Path(__file__).parent.parent, 'hello.py'
        )
    )
    

    结果

    C:\Users\isik\Desktop\Python\MessAround\project\module
    C:\Users\isik\Desktop\Python\MessAround\project
    C:\Users\isik\Desktop\Python\MessAround\project\hello.py
    

    这个文件结构

    -project
        -module
            -__init__.py
        -hello.py
        -__init__.py
    

    而代码位于project.module.__init__.py内

    【讨论】:

      【解决方案3】:

      虽然你的路径包含'..'不是问题(你仍然可以使用这个路径在Python中打开文件等),你可以使用resolve()规范化路径:

      from pathlib import Path
      path = Path.cwd() / '..' / 'data' / 'sales.csv'
      print(path)  # WindowsPath('G:/projects/code/../data/sales.csv')
      print(path.resolve())  # WindowsPath('G:/projects/data/sales.csv')
      

      注意:我个人会命名一个包含路径 path 的变量,而不是 file。所以你以后可以做file = open(path)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-12-17
        • 1970-01-01
        • 2021-08-15
        • 2019-06-21
        • 1970-01-01
        • 2010-10-04
        • 2015-07-21
        相关资源
        最近更新 更多