Python-路径处理:glob模块、os.path模块

python提供了3个内置库os.path模块,glob模块用于与操作系统路径相关功能

import os
import glob

>>返回Python系列文章目录<<

1 路径概念

1.1 路径分隔符

windows用反斜杠\表示路径分隔符,linux只用正斜杠/表示路径分隔符

由于反斜杠在代码中表示转义字符,输入window路径时可以使用两种方式:

  • 使用\\表示字符\path = 'F:\\SoftwareTest\\MyTool'
  • 使用r表示原始字符:path =r'F:\SoftwareTest\MyTool'

由于路径返回值的分隔符不确定,最好进行检查os.path.abspath(path),同时把相对路径变为绝对路径

相关方法:

os模块说明
os.sep -> str路径分隔符,Window平台下为r'\',Lunix平台下为/

1.2 绝对路径和相对路径

路径包括绝对路径和相对路径
绝对路径r'C:\Documents\Newsletters\Summer2018.pdf'
相对路径r'.\Publications\TravelBrochure.pdf'
当前路径r'.'

相关方法:

os模块说明
os.path.abspath() -> path此方法将输入path转化为所在平台的标准绝对路径。包含3个部分:
1.如果输入的是以.\或者..\开头的相对路径,则以WorkDir为base转化为绝对路径
2.如果绝对路径中间还含有.\或者..\等相对符号,则转化它们
3.同时也会切换路径分隔符
4.此函数不校验最终路径是否真实存在

1.3上层路径

使用..表示当前路径的上层路径
上层路径:..\A.text

1.4 调用者路径和被调用者路径

使用a.exe调用b.exe,b.exe中如果出现相对路径,或者b.exe中有获取当前路径的功能,获取到的到底是a.exe还是b.exe的路径,由b.exe的写法决定

所以在写程序时,获取当前路径最好采用获取【被调用者路径】的写法,防止程序被别人调用时出现路径错误

  • 以下方式将获得【被调用者路径】,推荐采用:
current_path = os.path.abspath(sys.argv[0])
  • 以下方式将获得【调用者路径】,请注意:
path = r'.\MyTool\b.exe'  # 相对路径都是调用者路径
current_path = os.getcwd()  # 获得调用者路径
current_path = os.path.realpath(__file__))

相关方法:

os模块说明
os.getcwd() -> path函数得到当前工作目录,返回path
注意被调用时,获得调用者路径
sys模块说明
sys.argv[0] -> pathargv[0]永远是被调用的文件地址,获得被调用者路径

2 glob模块(内置库)

glob模块是最简单的模块之一,内容非常少。用它可以查找符合特定规则的文件路径名。跟使用windows下的文件搜索差不多。查找文件只用到三个匹配符:*, ?, []*匹配0个或多个字符;?匹配单个字符;[]匹配指定范围内的字符,如:[0-9]匹配数字

2.1 glob.glob()函数

glob.glob()返回所有匹配的文件路径列表。它只有一个参数pathname,定义了文件路径匹配规则,这里可以是绝对路径,也可以是相对路径。下面是使用glob.glob的例子:

import glob

#获取指定目录下的所有图片
print (glob.glob(r"c:\home\*\*.png"),"\n")#加上r让字符串不转义

#获取上级目录的所有.py文件
print (glob.glob(r'..\*.py')) #相对路径

2.2 glob.iglob()函数

glob.glob()的迭代器版本,返回迭代器,节约内存,使用for语句遍历其中的内容

import glob

#父目录中的.py文件
f = glob.iglob(r'..\*.py')
for py in f:
    print (py)

3 os.path模块(内置库)

3.1 绝对路径和相对路径

os模块说明
os.path.abspath() -> path此方法将输入path转化为所在平台的标准绝对路径。包含3个部分:
1.如果输入的是以.\或者..\开头的相对路径,则以WorkDir为base转化为绝对路径
2.如果绝对路径中间还含有.\或者..\等相对符号,则转化它们
3.同时也会切换路径分隔符
4.此函数不校验最终路径是否真实存在

3.2 路径字符串拆解合并

os模块说明
os.sep -> str路径分隔符,Window平台下为r'\',Lunix平台下为/
os.path.split(path) -> [dir, file]分离路径的目录名和文件名,返回列表
os.path.splitext(path) -> [str, str]从路径中分离出扩展名,返回列表,拓展名在[1]
os.path.dirname(path) -> dir返回目录
os.path.basename(path) -> file返回文件名,包括拓展名
os.path.join(dir,file) -> path连接目录与文件名或目录,分隔符按平台

3.3 路径检测

os模块说明
os.path.exists(path) -> bool检验给出的路径存在,返回布尔值
注意:输入None则报错
os.path.isfile(path) -> bool检验给出的路径是一个文件,返回布尔值
意:输入None则报错
os.path.isdir(path) -> bool检验给出的路径是一个目录,返回布尔值
注意:输入None则报错
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值