文件路径的 Python 处理

作者: , 共 1435 字 , 共阅读 0

1、常见路径形式

主要形式是下面三种。后面两种实际指向同一个位置(如果path是一个已存在的文件夹),但处理结果会有所差异。

  • /path/name.ext
  • /path
  • /path/

注意:pathlib将后面两种视为同样的路径。

当然还有相对路径,比如./path/name.extpath/name.ext,没有本质区别。

另外 Windows 路径因为带盘符,会更复杂一些。可以将盘符视为一种根目录路径。

2、Python2 的os.path

os.path.split首先可以将路径分拆为路径和文件名:

import os 

os.path.split("/path/name.ext")  # ['/path', 'name.ext']
os.path.split("/path/")  # ['/path', '']
os.path.split("/path")  # ['/', 'path']

如果只需要获取其中一项,可以直接用os.path.dirname()os.path.basename()

然后os.path.splitext可以将basename继续拆分为两段,其中后一段是后缀(带"."):

os.path.splitext("name.tar.gz") # ['name.tar', '.gz']

3、Python3 的 pathlib

在 Python2 里大家一般使用os.path,但在 Python3 里引入了pathlib,对于路径有更多的处理。

但一个很大的区别在于,pathlib会自动去掉路径结尾的/,这使得/path/path/被认为一模一样(个人觉得还是 python2 里的os.path的处理更合理一些)。

路径 parent name suffix stem
/path/name.ext /path name.ext .ext name
/path / path path
/path/ / path path

注意事项:

  • 上面几个不是函数,是成员。pathlib.Path("./abc").stem,不是pathlib.Path("./abc").stem()
  • suffix包含 "."。
  • suffixstem的区分是最后一个.,比如file.tar.gz对应的suffixstem分别是.gzfile.taros.path.splitext也是这样处理的)。

接下来是 pathlib 能提供的更多一些的功能:

  • path.parts,直接拆成组件,比如Path("/data/a.tar").parts = ["/", "data", "a.tar"]
  • path.suffixes,返回后缀数组,比如Path("a.tar.gz").suffixes = [".tar", ".gz"]
  • path.parents,返回父路径数组,比如Path("/data/dir/a.bin").parents = ["/data/dir", "/data/", "/"]
  • path.root,返回根目录。绝对路径返回/或者盘符。相对路径返回空

Q. E. D.

类似文章:
编程 » Python
在 Python 中,有时候为了获取当前运行的脚本的同目录下的另外一个文件,会这么写:
编程 » Matlab
第一步,which函数可用来获取 Matlab 函数的全路径(包含路径和文件名)。
编程 » Python
Python 在搜索模块时,依次搜索sys.path里的位置,直到找到模块为止。下面命令可以查看当前的搜索路径:
编程 » Python
在 Python 里,我们可以直接用 os.system 来执行系统命令(假设下面的 strip 是一个可以处理多个文件的第三者程序):
相似度: 0.097
boost是除std外最常用的 C++库,覆盖很多常用操作。目前最新的版本是1.59.0http://boost.org/上可以查看最新版本号,将下面的 59 换成最新的即可)。
Pyhon 的抽象基类( abstruct base class )库abc定义了类似于 C++的纯虚函数的功能:
编程 » django, requests, python
这里的 requests 是指 Python 的 requests 包。
编程 » Python库
Python 的官方自带库json库处理 JSON 很方便,但它只支持标准的 JSON 格式。rapidjson 库来自于 json 的 C++库,速度比json库快五倍,而且支持一些非标准的 JSON 字符串。
Python 提供很多语法糖,用起来非常方便。@dataclass 就是其中之一。
命令行参数的初步说明,请参考argparse 模块用法实例详解,写的很清晰而详细。
其实moment.js 官方主页已经很详细和清晰了,这里做一下笔记加强记忆。
从东门出发的 10 公里大环线,南线上到高压线塔,后山山脊下到上方寺遗址,再从北线飞来石塔下山。总路程接近 10 公里,爬升接近 1000 米。