python中处理路径问题,详解 os包下的path 模块。

os.path包

  1. 得到和change当前的工作目录
1
2
os.getcwd()
os.chdir('/test')
  1. join 不同的路径和文件名
1
os.path.join()
  1. 将路径中的简写形式转换成完整形式

~ 家目录转换成 /home/user

The os.path.expanduser() function will expand a pathname that uses ~ to represent the current user’s home directory.

  1. os.path.split()

os.path.split(path) 作用是把path分割成dirname和basename,返回一个元组。

  1. os.path.splitext(path) 分离文件名与扩展名

默认返回(fname,fextension)元组

1
2
os.path.splitext('c:\\csv\\test.csv')

  1. 得到路径中的文件名

os.path.basename(path)

It is used to return the basename of the file . This function basically return the file name from the path given.

  1. 得到路径中的文件夹名

os.path.basename(path)

和上面的函数基本是相反的。

It is used to return the directory name from the path given. This function returns the name from the path except the path name.

  1. os.path.realpath()

返回的是文件的标准路径,不是软连接所在的路径。

  1. 返回list 中,所有path 共有的最长的路径

os.path.commonprefix(list)

判断类型的函数

  1. os.path.isabs(path)

判断是否是绝对路径。 在linux 中认为 `\开头的是 绝对路径。

  1. os.path.isdir(path)

判断是否是文件夹路径

  1. os.path.isfile(path)

判断是否是一个文件

  1. os.path.exists(path)

Returns True if path refers to an existing path. Returns False for broken symbolic links. 判断是否是一个合法的路径

获取文件信息的函数

  1. os.path.getatime(path)

Returns the time of last access of path.

  1. os.path.getmtime(path)

Returns the time of last modification of path.

  1. os.path.getsize(path)

Returns the size, in bytes, of path. 不常用

glob.glob() 包

glob 是 python 自带的一个文件操作相关模块。 用于查找符合要求的文件,类似于Windows下的文件搜索,支持这三个通配符操作, * , ? , [ ] ,* 代表0个或多个字符,? 代表一个字符,[ ] 表示匹配指定范围内的字符,如[0-9]匹配数字。

glob一共三个主要函数,glob(), iglob(), escape()。 最常用的是 glob() 函数,下面就对这三个函数进行详解。

1
2
3
import glob
glob.glob("/home/jeng/*py")
# ... 这种以 py结尾的文件

The glob.glob() function returned a list of relative pathnames. If you want to construct an absolute pathname - i.e. one that includes all the directory names back to the root directory or drive letter - then we’ll need the os.path.realpath() function. 上述函数得到的是相对路径,那么可以使用 os.path.realpath() 得到绝对路径。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import glob
glob.glob("/home/ismail/poftut.c") # exact string search
glob.glob("/home/ismail/poftut.c") # Wildcards, 正则表达式
glob.glob("/home/ismail/*/*.txt") # Wildcards with Multilevel Directories
glob.glob("?????.py") # 文件名是5个字母组成


glob.glob("/home/ismail/file?.txt") #Single Character Wildcard
glob.glob("/home/ismail/[emp]*.tx?") # Multiple Characters,  [] 表示可选项,相当于匹配规则,多看多学
glob.glob("/home/ismail/*[0-9]*") # 表达的是 number ranges,文件名中需要包含 0到9 其中一个数字
glob.glob("/home/ismail/[a-c]*") # Alphabet Ranges 文件名中以 a到c字母开头

并且是可以 recursive search的(这个是非常有用的,find all images)

1
2
3
4
5
6
7
import glob
import os

CWD = os.getcwd()

for name in glob.glob(CWD+'/**/*', recursive=True):
    print(name)

This code will return the paths for all files in both the parent and its subdirectory.

  1. iglob() method | Python Glob

This method creates a Python generator object which can be used to list files under a given directory. You can call the next() function to print names of files. 将 generator 的思想结合到 glob() 中去

与glob.glob()的区别是:glob.glob同时获取所有的匹配路径,而 glob.iglob一次只获取一个匹配路径。

  1. glob.escape(pathname)

escape(pattern)

Escape all non-alphanumeric characters in pattern. 对于转移字符的定义

用于转义所有特殊字符 ’\?’,’*'和 ‘[’。 如果要匹配可能包含特殊字符的任意文字字符串,这将非常有用。

1
2
 re.escape('www.python.org')
# 'www\\.python\\.org'
  1. 编码的一些问题

现在python3 默认是使用 utf-8 进行编码的。

1
file = open('alone.txt', encoding='utf-8')

转义字符

1
2
3
4
import html
p = '<abc>'
txt= html.unescape(p)
print (txt) # '<abc>'