Python 路径操作

本文介绍了Python中处理路径的相关操作,包括使用模块进行目录初始化、路径拼接、分解,获取路径信息,以及目录的创建、删除、迭代等。同时,讲解了通配符的应用和文件操作的相关内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、os.path 操作

  • 3.4 版本之前,使用 os.path 模块
  • os.path 模块输出结果都是字符串,操作的对象也是字符串,没有单独的 os.path 对象
# Windows 11 Jupyter Notebook
from os import path

p = path.join('/a', 'b', 'c')
print(1, type(p), p)
print(2, path.exists(p))
print(3, path.split(p))
print(4, path.dirname(p), path.basename(p))
print(5, path.abspath(p))
print(6, path.abspath(''), path.abspath('.')) 
print(7, path.splitdrive('c:/temp/test'))    # windows method
print(8, path.splitdrive('/temp/test'))
# path.abspath()  TypeError: abspath() missing 1 required positional argument: 'path'
1 <class 'str'> /a\b\c
2 False
3 ('/a\\b', 'c')
4 /a\b c
5 C:\a\b\c
6 C:\Users\jiao1 C:\Users\jiao1
7 ('c:', '/temp/test')
8 ('', '/temp/test')
# Windows 11 PyCharm 环境
from os import path

p1 = path.abspath(__file__)

print('=' * len(p1))
print(p1)
i = 1
while p1 != path.dirname(p1):
    dirname = path.dirname(p1)
    print(i, dirname)
    i += 1
    p1 = dirname
===================================================
D:\PycharmProjects\pythonProject\202108089\test4.py
1 D:\PycharmProjects\pythonProject\202108089
2 D:\PycharmProjects\pythonProject
3 D:\PycharmProjects
4 D:\

2、pathlib 模块

  • 3.4 之后,建议使用 pathlib 模块,提供 Path 对象来操作,包括目录和文件
  • from pathlib import Path

2.1 目录初始化

from pathlib import Path

print(1, Path(), Path(''), Path('.')) # 均表示 当前目录
print(2, Path('a', 'b', 'c/d'))       # 当前目录下的 a/b/c/d
print(3, Path('/etc'))                # 根下的 etc 目录
print(4, Path().absolute(), Path('').absolute(), Path('.').absolute())
1 . . .
2 a\b\c\d
3 \etc
4 C:\Users\jiao1 C:\Users\jiao1 C:\Users\jiao1
p = Path()
print(type(p), p.absolute())

Out:
<class 'pathlib.WindowsPath'> C:\Users\jiao1

2.2 路径的拼接

  • 操作符 /

    Path 对象 / Path 对象   (得到一个 Path 对象)
    Path 对象 / 字符串   (得到一个 Path 对象)
    字符串 / Path 对象   (得到一个 Path 对象)
    Path 对象 / 字符串 / 字符串   (得到一个 Path 对象)
    错误示范: 字符串 / 字符串 / Path 对象 (字符串  无法相除)
    
    'c' / Path('z.txt')  # WindowsPath('c/z.txt')
    Path('.').absolute() / 'a.py'  # WindowsPath('C:/Users/jiao1/a.py')
    'c:/' / Path('z.txt')   # WindowsPath('c:/z.txt')
    
    Path('.').absolute() / 'c' / 'd' / 'e.txt'  # PosixPath('/usr/bin/c/d/e.txt')
    
  • joinpath(*others) 连接多个字符串或者 Path 对象 得到 Path 对象

    (Path().absolute()).joinpath('a', 'c', 'd/e')
    # WindowsPath('C:/Users/jiao1/a/c/d/e')
    
    Path.joinpath(Path().absolute(), 'z.py')
    # WindowsPath('C:/Users/jiao1/z.py')
    
    Path.joinpath(Path().absolute(), 'a/b/c/d/e')
    # WindowsPath('C:/Users/jiao1/a/b/c/d/e')
    
    Path.joinpath(Path().absolute(), Path('sybil') ,'a/b/c', Path('d/z.py'))
    # WindowsPath('C:/Users/jiao1/sybil/a/b/c/d/z.py')
    
    Path.joinpath(Path().absolute(), 'z.py')
    # PosixPath('/usr/bin/z.py')
    

2.3 路径的分解

  • parts 属性,可以返回路径中的每一个部分

    p = Path.joinpath(Path().absolute(), Path('sybil') ,'a/b/c', Path('d/z.py'))
    p
    # WindowsPath('C:/Users/jiao1/sybil/a/b/c/d/z.py')
    p.parts
    # ('C:\\', 'Users', 'jiao1', 'sybil', 'a', 'b', 'c', 'd', 'z.py')
    

2.4 获取路径

  • str 获取路径字符串

  • bytes 获取路径字符串的 bytes

    p = Path('/etc')
    print(str(p), bytes(p), sep=' *** ')
    
    # \etc *** b'\\etc'
    

2.5 目录的父目录

p = Path.joinpath(Path().absolute(), Path('sybil') ,'a/b/c', Path('d/z.py'))
p    # WindowsPath('C:/Users/jiao1/sybil/a/b/c/d/z.py')

p.parents    # <WindowsPath.parents>
type(p.parents)    # pathlib._PathParents
p.parent    # WindowsPath('C:/Users/jiao1/sybil/a/b/c/d')
p.parent.parent    # WindowsPath('C:/Users/jiao1/sybil/a/b/c')
p.parents[0]    # WindowsPath('C:/Users/jiao1/sybil/a/b/c/d')
p.parents[1]    # WindowsPath('C:/Users/jiao1/sybil/a/b/c')
# p.parents[-1]    # Path.parents 不支持负索引,因为时惰性求值,需要一层层计算
# print 打印只是一种表达形式,其实质时 str(object)
for x in p.parents:
    print(x, type(x))

Out:
C:\Users\jiao1\sybil\a\b\c\d <class 'pathlib.WindowsPath'>
C:\Users\jiao1\sybil\a\b\c <class 'pathlib.WindowsPath'>
C:\Users\jiao1\sybil\a\b <class 'pathlib.WindowsPath'>
C:\Users\jiao1\sybil\a <class 'pathlib.W
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值