如果我们想在Python程序中操作文件、目录,我们可以使用Python内置的os
模块,来直接调用操作系统提供的相关的接口函数。
操作文件和目录的函数一部分放在os
模块中,一部分放在os.path
模块中。
下面列举了常用的一些文件、目录操作(如果需要完整资料,可以查询 官方docs ):
>>> os.getcwd()
'/home/ming/桌面/python'
>>> os.chdir('../')
>>> os.getcwd()
'/home/ming/桌面'
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']
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 )
os.rmdirs(path)
>>> os.path.exists('/Users/michael')
True
>>> os.path.exists('/111/222')
False
输入一个相对路径,返回对应的绝对路径
>>> os.path.abspath('.')
'/Users/michael'
>>> os.path.abspath('..')
'/Users'
>>> os.path.abspath('game')
'/Users/michael/game'
如果我们要把两个或多个路径组件拼接成一个,不建议直接拼字符串,更合适的方式是通过os.path.join()
函数。
os.path.join()
连接规则:
/
,在Windows下为\
,后面以前者举例)Linux下
>>> path = os.path.join('/Users/michael', 'file.txt')
'/Users/michael/file.txt'
Windows下
>>>os.path.join('C:\\Users', 'C:\\Users', 'game')
'C:\\Users\\game'
os.path.split()
函数,可以把一个路径拆分为两部分,后一部分总是最后级别的目录或文件名:
>>> 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'
需要注意的是,这些合并、拆分路径的函数并不要求目录和文件要真实存在,它们其实只是对字符串进行操作。
一般来讲,我们在代码中涉及到文件的操作时,最好使用文件的相对路径,这样在你的程序迁移到别人的电脑时,可以保证不会出现文件读取异常的错误(不同电脑存放代码和数据的绝对位置一般不同)
在Python中以绝对路径或者相对路径导入文件的方法
参考:
Python目录和路径操作
操作文件和目录 - 廖雪峰的官方网站