55.os模块中关于文件/目录常用的函数使用方法
getcwd()返回当前工作目录
>>> import os
>>> os.getcwd()
'D:\\python\\3.5.1'
chdir(path)改变工作目录
>>> os.chdir('C:\\')
>>> os.getcwd()
'C:\\'
listdir(path='.')列举指定目录中的文件名('.'表示当前目录,'..'表示上一级目录)
>>> os.listdir('.')
['$360Section', '$Recycle.Bin', '360SANDBOX', 'Boot', 'bootmgr', 'BOOTNXT', 'BOOTSECT.BAK', 'Config.Msi', 'Documents and Settings', 'hiberfil.sys', 'Intel', 'MSOCache', 'PerfLogs', 'Program Files', 'Program Files (x86)', 'ProgramData', 'Recovery', 'swapfile.sys', 'System Volume Information', 'Users', 'Windows', '学习暂存']
mkdir(path)创建单层目录,如该目录已存在抛出异常
1)创建一个文件夹
>>> os.mkdir('D:\\A')
>>> os.getcwd()
'C:\\'
>>> os.chdir('D:\\')
>>> os.listdir('.')
['$RECYCLE.BIN', '360', '360Downloads', 'A', 'AppStore', 'Axcure', 'BaiduNetdiskDownload', 'DTLFolder', 'Firefox', 'kuaiya', 'Movie', 'mysql', 'pagefile.sys', 'python', 'QQ', 'record.txt', 'SMSTSLog', 'System Volume Information', 'test.txt', 'visualstudiocode', 'weixin', 'WinRAR', '下载', '坚果云', '射手播放器', '微云', '曹津', '百度云盘', '迅雷', '迅雷下载']
2)创建复合文件夹(夫文件夹已经存在)
>>> os.mkdir('D:\\A\\B')
>>> os.listdir('.')
['$RECYCLE.BIN', '360', '360Downloads', 'A', 'AppStore', 'Axcure', 'BaiduNetdiskDownload', 'DTLFolder', 'Firefox', 'kuaiya', 'Movie', 'mysql', 'pagefile.sys', 'python', 'QQ', 'record.txt', 'SMSTSLog', 'System Volume Information', 'test.txt', 'visualstudiocode', 'weixin', 'WinRAR', '下载', '坚果云', '射手播放器', '微云', '曹津', '百度云盘', '迅雷', '迅雷下载']
>>> os.chdir('D:\\A')
>>> os.getcwd()
'D:\\A'
>>> os.listdir('.')
['B']
makedirs(path)递归创建多层目录,如该目录已存在抛出异常,注意:‘E:\\a\\b'和'E:\\a\\c'并不会冲突
>>> os.makedirs('D:\\a\\b\\c')
>>> os.getcwd()
'D:\\A'
>>> os.listdir()
['B']
>>> os.chdir('D:\\')
>>> os.listdir()
['$RECYCLE.BIN', '360', '360Downloads', 'A', 'AppStore', 'Axcure', 'BaiduNetdiskDownload', 'DTLFolder', 'Firefox', 'kuaiya', 'Movie', 'mysql', 'pagefile.sys', 'python', 'QQ', 'record.txt', 'SMSTSLog', 'System Volume Information', 'test.txt', 'visualstudiocode', 'weixin', 'WinRAR', '下载', '坚果云', '射手播放器', '微云', '曹津', '百度云盘', '迅雷', '迅雷下载']
>>> os.chdir('D:\\a')
>>> os.listdir()
['B']
>>> os.chdir('D:\\a\\B')
>>> os.listdir()
['c']
>>>
remove(path)删除文件
>>> os.remove('D:\\a\\B\\c\\hhh.txt')
rmdir(path)删除单层目录,如该目录非空则抛出异常
>>> os.rmdir('D:\\a\\B\\c')
Traceback (most recent call last):
File "", line 1, in
os.rmdir('D:\\a\\B\\c')
OSError: [WinError 145] 目录不是空的。: 'D:\\a\\B\\c'
>>>
removedirs(path)递归删除目录,从子目录到父目录逐层尝试删除,遇到目录非空则抛出异常
>>> os.getcwd()
'D:\\a\\B'
>>> os.chdir('D:\\')
>>> os.removedirs('D:\\A\\B\\c')
>>> os.listdir('.')
['$RECYCLE.BIN', '360', '360Downloads', 'AppStore', 'Axcure', 'BaiduNetdiskDownload', 'DTLFolder', 'Firefox', 'kuaiya', 'Movie', 'mysql', 'pagefile.sys', 'python', 'QQ', 'record.txt', 'SMSTSLog', 'System Volume Information', 'test.txt', 'visualstudiocode', 'weixin', 'WinRAR', '下载', '坚果云', '射手播放器', '微云', '曹津', '百度云盘', '迅雷', '迅雷下载']
rename(old,new)将文件old重命名为new
>>> os.getcwd()
'D:\\a\\B'
>>> os.chdir('D:\\')
>>> os.removedirs('D:\\A\\B\\c')
>>> os.listdir('.')
['$RECYCLE.BIN', '360', '360Downloads', 'AppStore', 'Axcure', 'BaiduNetdiskDownload', 'DTLFolder', 'Firefox', 'kuaiya', 'Movie', 'mysql', 'pagefile.sys', 'python', 'QQ', 'record.txt', 'SMSTSLog', 'System Volume Information', 'test.txt', 'visualstudiocode', 'weixin', 'WinRAR', '下载', '坚果云', '射手播放器', '微云', '曹津', '百度云盘', '迅雷', '迅雷下载']
>>> os.rename('test.txt','hahah.txt')
>>> os.listdir('.')
['$RECYCLE.BIN', '360', '360Downloads', 'AppStore', 'Axcure', 'BaiduNetdiskDownload', 'DTLFolder', 'Firefox', 'hahah.txt', 'kuaiya', 'Movie', 'mysql', 'pagefile.sys', 'python', 'QQ', 'record.txt', 'SMSTSLog', 'System Volume Information', 'visualstudiocode', 'weixin', 'WinRAR', '下载', '坚果云', '射手播放器', '微云', '曹津', '百度云盘', '迅雷', '迅雷下载']
>>>
system(command)运行系统的shell命令
>>> os.system('cmd')
walk(top)
*以下支持路径操作中常用倒的一些定义,支持所有平台
os.curdir指代当前目录('.')
>>> os.curdir
'.'
>>> os.listdir(os.curdir)#利用这个方式可以规避不同系统中不是用一个点来表示本目录
['$RECYCLE.BIN', '360', '360Downloads', 'AppStore', 'Axcure', 'BaiduNetdiskDownload', 'DTLFolder', 'Firefox', 'hahah.txt', 'kuaiya', 'Movie', 'mysql', 'pagefile.sys', 'python', 'QQ', 'record.txt', 'SMSTSLog', 'System Volume Information', 'visualstudiocode', 'weixin', 'WinRAR', '下载', '坚果云', '射手播放器', '微云', '曹津', '百度云盘', '迅雷', '迅雷下载']
os.pardir指代上一级目录('..')
os.sep输出操作系统特定的路径分隔符(win下为'\\',linux下为'/')
os.linesep当前平台使用的行终止符(win下为'\r\n',linux下为'\n')
os.name指代当前使用的操作系统(包括:posix、nt、mac、os2、ce、java)
2)os.path模块中关于路径常用的函数使用方法
basename(path)去掉目录路径,单独返回文件名
>>> os.path.basename('D:\\a\\b\\c\\yangfei.txt')
'yangfei.txt'
dirname(path)去掉文件名,单独返回目录路径
>>> os.path.dirname('D:\\a\\b\\c\\yangfei.txt')
'D:\\a\\b\\c'
join(path1[,path1[,....]])将path1,path2各部分组合成一个路径名
>>> os.path.join('A','B','C')
'A\\B\\C'
>>> os.path.join('D:\\','A','B','C')#join不会真的去建立文件夹
'D:\\A\\B\\C'
>>> os.getcwd()
'D:\\'
>>> os.chdir('D:\\A')
Traceback (most recent call last):
File "", line 1, in
os.chdir('D:\\A')
FileNotFoundError: [WinError 2] 系统找不到指定的文件。: 'D:\\A'
split(path)分割文件名与路径,返回(f_path,f_name)元组,如果完全使用目录,它会将最后一个目录作为文件名分离,且不会判断文件或目录是否存在
>>> os.path.split('E:\\A\\sexy.avi')
('E:\\A', 'sexy.avi')
>>> os.path.split('E:\\A\\B')
('E:\\A', 'B')
splitext(path)分离文件名与扩展名,返回(f_name,f_extension)元组
>>> os.path.splitext('E:\\a\\sexy.avi')
('E:\\a\\sexy', '.avi')
getsize(file)返回指定文件的尺寸,单位是字节
>>> os.getcwd()
'D:\\'
>>> os.path.getsize('hahah.txt')
13
getatime(file)返回指定文件最近的访问实际(浮点型秒数,可用time模块的gmtime()或者localtime()函数换算)
getctime(file)返回指定文件的创建时间(浮点型秒数,可用time模块的gmtime()或者localtime()函数换算)
getmtime(file)返回指定文件最新的修改时间(浮点型秒数,可用time模块的gmtime()或者localtime()函数换算)
>>> os.path.getatime('hahah.txt')
1515416742.079957
>>> import time
>>> time.localtime(os.path.getatime('hahah.txt'))
time.struct_time(tm_year=2018, tm_mon=1, tm_mday=8, tm_hour=21, tm_min=5, tm_sec=42, tm_wday=0, tm_yday=8, tm_isdst=0)
*以下为函数返回True或False
exists(path)判断指定路径(目录或文件)是否存在
>>> os.listdir('.')
['$RECYCLE.BIN', '360', '360Downloads', 'AppStore', 'Axcure', 'BaiduNetdiskDownload', 'DTLFolder', 'Firefox', 'hahah.txt', 'kuaiya', 'Movie', 'mysql', 'pagefile.sys', 'python', 'QQ', 'record.txt', 'SMSTSLog', 'System Volume Information', 'visualstudiocode', 'weixin', 'WinRAR', '下载', '坚果云', '射手播放器', '微云', '曹津', '百度云盘', '迅雷', '迅雷下载']
>>> exists('D:\\360')
Traceback (most recent call last):
File "", line 1, in
exists('D:\\360')
NameError: name 'exists' is not defined
>>> os.path.exists('D:\\360')
True
isabs(path)判断指定路径是否为绝对路径
>>> os.path.isabs('D:\\360')
True
isdir(path)判断指定路径是否存在且是一个目录
isfile(path)判断指定路径是否存在且是一个文件
islink(path)判断指定路径是否存在且是一个符合链接
ismount(path)判断指定路径是否存在且是一个挂载点
samefile(path1,path2)判断path1和path2两个路径是否指向同一个文件
>>> os.path.exists('D:\\360')
True
>>> os.path.isabs('D:\\360')
True
>>> os.path.isabs('曹津\\PS4')
False
>>> os.path.isdir('D:\\360')
True
>>> os.path.isfile('D:\\360')
False
>>> os.path.islink('D:\\360')
False
>>> os.path.ismount('D:\360')
False
>>> os.path.ismount('D:\\')
True
56.pickle模块
1)将文件存放成二进制:picking
2)将二进制文件读取成源文件:unpikling
3)将列表写入成二进制文件,再将二进制文件解压读出
>>> import pickle #引入pickle模块
>>> my_list=[123,3.14,'xiaojiayu',['another list']] #定义一个列表my_list
>>> pickle_file1=open('my_file.plk','wb') #以wb形式打开(没的话就新增)文件my_file.plk,赋给对象pickle_file1
>>> pickle.dump(my_list,pickle_file1) #利用pickle的dump函数将my_list的数据以二进制形式倒入倒pickle_file1中
>>> pickle_file1.close()#关闭pickle_file1
>>> pickle_file2=open('my_file.plk','rb')#以二进制读出的形式rb打开my_file.plk并赋给对象pickle_file2
>>> pickle.load(pickle_file2)#利用pickle的load函数将pickle_file2解压后读出
[123, 3.14, 'xiaojiayu', ['another list']]