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返回绝对路径,同时也会切换路径分隔符

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返回绝对路径,同时也会切换路径分隔符

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则报错

版权声明:本文为u011079613原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。