如果我们想 在 Python 中操作文件、目录,我们可以使用 Python 内置的 os
模块,来 调用 操作系统提供的相关接口函数。
操作文件和目录的函数一部分放在os
模块中,一部分放在os.path
模块中。
下面整理了常用的一些文件、目录操作(如果需要完整资料,可以查询 官方docs ):
1、 目录操作(os 模块)
1.1 获取当前工作目录
>>> import os
>>> os.getcwd()
'/home/ming/桌面/python'
1.2 切换工作目录
>>> os.chdir('../')
>>> os.getcwd()
'/home/ming/桌面'
1.3 获取指定目录下所有文件和目录名
os.listdir(path=’.’)
返回指定的文件夹下包含的文件或文件夹的名字的列表,需要注意的是
- 列表按任意顺序排列
- 不包含特殊条目 ‘.’ 和 ‘…’,即使它们确实在目录中存在
>>> os.listdir('../DrClient/')
['hostinfo.sh',
'201630664345',
'drcomauthsvr',
'debug.log',
'translator',
'DrClientConfig',
'DrClientLinux.rcc',
'privillege.sh',
'drcomauthsvr.drsc',
'DrClientLinux',
'drcomrulesvr.drsc',
'change.sh',
'test_upeate_request']
1.4 创建目录
os.mkdir(path)
创建指定的单层目录,如果父目录(上一级目录)不存在,则无法创建成功
>>> os.mkdir('dirA/')
>>> os.listdir('./')
['dirA']
>>> os.mkdir('dirB/dirC')
FileNotFoundError
os.makedirs(path)
创建指定的目录,如果父目录不存在,则递归创建父目录,经常结合os.path.exits()
使用
if not os.path.exists( checkpoint_dir ):
os.makedirs( checkpoint_dir )
1.5 删除目录
os.rmdirs(path)
2. 路径操作(os.path 模块)
2.1 判断一个路径是否存在
>>> os.path.exists('/Users/michael')
True
>>> os.path.exists('/111/222')
False
2.2 获取相对路径的绝对路径
输入一个相对路径,返回对应的绝对路径
>>> os.path.abspath('.')
'/Users/michael'
>>> os.path.abspath('..')
'/Users'
>>> os.path.abspath('game')
'/Users/michael/game'
2.3 路径拼接
如果要 把两个或多个 路径组件 拼接成一个,不建议直接使用 字符串的拼接方法,更合适的方式是使用 os.path.join()
函数。
os.path.join()
函数功能:
连接两个或更多的 路径组件(可以是 相对路径,也可以是 绝对路径)
连接规则:
- 相对路径的叠加。如果路径组件是相对路径,则函数会自动在组件的连接处加上路径分隔符(在 Linux/Unix/Mac 下为
/
,在 Windows 下为\
,后面以前者举例) - 绝对路径的排查。如果路径组件中有绝对路径,则函数 从最后一个绝对路径组件开始进行拼接,在它之前的所有路径组件均会被舍弃
Linux下
>>> os.path.join('/Users/michael', 'file.txt')
'/Users/michael/file.txt'
>>> os.path.join('/Users/michael/', 'file.txt')
'/Users/michael/file.txt'
>>> os.path.join('/Users/Jim', '/Users/michael', 'file.txt')
'/Users/michael/file.txt'
Windows下
>>>os.path.join('C:\\Users', 'C:\\Users', 'game')
'C:\\Users\\game'
2.4 路径拆分
同理,要拆分路径时,也不要直接去拆字符串,而是使用 os.path.split()
函数
os.path.split()
函数的作用是 把一个路径拆分为两部分,后一部分总是 最后级别的 目录 或 文件名:
>>> os.path.split('/Users/michael/testdir/subdir')
('/Users/michael/testdir', 'subdir')
>>> os.path.split('/Users/michael/testdir/file.txt')
('/Users/michael/testdir', 'file.txt')
>>> os.path.dirname('/Users/michael/testdir/file.txt')
'/Users/michael/testdir'
>>> os.path.basename('/Users/michael/testdir/file.txt')
'file.txt'
注意,上述所有合并、拆分路径的函数 并不要求目录和文件要真实存在,它们其实只是对字符串进行操作。
2.5 文件名拆分
>>> (filename,extension) = os.path.splitext(tempfilename)
注意事项
一般来讲,我们在代码中涉及到文件的操作时,最好使用文件的相对路径,这样在你的程序迁移到别人的电脑时,可以保证不会出现文件读取异常的错误(不同电脑存放代码和数据的绝对位置一般不同)