os模块提供了对系统环境、文件、目录等操作系统级的接口函数。本文主要描述os模块和os.path模块常用函数以及常用实例。
os模块函数
os.getcwd() 获取当前工作的目录。 os.listdir('dirname') 获取指定目录下的文件和目录,以列表形式输出 os.makedirs('dirname1/dirname2') 递归创建目录,相当于shell中的mkdir -p命令 os.removedirs('dirname') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推。不好用,建议使用shutil.rmtree() os.mkdir('dirname') 创建目录;相当于shell中mkdir命令 os.rmdir('dirname') 删除空目录,若目录不为空则无法删除。相当于shell中rmdir命令 os.chdir('dirname') 切换到执行目录,相当于shell中cd命令 os.remove(path) 删除path指定的文件 os.rename(old,new) 重命名文件或幕 os.chmod(path,mod) 改变文件的访问权限,mode用UNIX系统中的权限代号表示 os.stat(path) 获取path指定文件的所有属性 os.sep 获取操作系统特定的路径分隔符,win下为"\\",Linux下为"/" os.linesep 获取当前平台使用的行终止符,win下为"\t\n",Linux下为"\n" os.pathsep 获取用于分割文件路径的字符串 os.name 获取当前使用平台。nt表示windows,posix 表示linux os.system('command') 执行系统外部命令 os.environ 获取系统环境变量 os.walk() 获取指定目录下的所有文件和目录 os.tmpfile() 创建一个临时文件,文件创建在操作系统的临时目录中
os.path模块函数
os.path.abspath(path) 获取path绝对路径
os.path.split(path) 分割成目录和文件名,以二元组形式返回
os.path.splitext(path) 从路径中分割出文件的扩展名
os.path.dirname(path) 获取文件路径
os.path.basename(path) 获取文件名
os.path.exists(path) 判断文件或目录是否存在
os.path.isabs(path) 判断输入的路径是否为绝对路径
os.path.isfile(path) 判断是否为文件
os.path.isdir(path) 判断是否为目录
os.path.join(path1[, path2[, ...]]) 组合多个路径
os.path.getctime(filename) 获取文件或者目录的创建时间
os.path.getatime(filename) 获取文件或者目录的最后存取时间
os.path.getmtime(filename) 获取文件或者目录的最后修改时间
os.path.getsize(filename) 获取文件大小,如果为目录,返回0
重点函数介绍
1、os.walk()
语法
os.walk(top[, topdown=True[, οnerrοr=None[, followlinks=False]]])
参数描述
top 指定搜索目录
topdown 可选参数,默认值为True, 表示先返回顶级目录下的文件,然后再遍历子目录中的文件。如果为False,表示先遍历子目录中的文件,然后再返回顶级目录下的文件。
onerror 可选,默认值为None,表示忽略文件遍历时的错误。如果不为空,则提供一个自定义函数提示错误信息后继续遍历或抛出异常中止遍历。
followlinks 可选参数,默认值为False。表示是否要跟随目录下的链接去继续遍历,要注意的是,os.walk不会记录已经遍历的目录,所以跟随链接遍历的话有可能一直循环调用下去。
输出
返回3元组(dirpath, dirnames, filenames)。其中dirpath表示目录的路径,是一个字符串。dirnames 是一个列表,包含了dirpath下所有子目录的名字。filenames是一个列表,包含了非目录文件的名字。这些名字不包含路径信息,如果需要得到全路径,需要使用os.path.join(dirpath, name)
常用实例
1、目录和文件的创建、删除
#-*- coding:utf-8 -*-#import os import shutilcur_dir = os.getcwd() new_dir = os.path.join(cur_dir,'temp')if not os.path.exists(new_dir):os.makedirs(new_dir) else:shutil.rmtree(new_dir)os.makedirs(new_dir)new_file = os.path.join(new_dir,'tmp.log') fp = open(new_file,'w') fp.write('test') fp.close()
2、搜索并输出指定的/home目录下的所有文件
#!/usr/bin/python # -*- coding: UTF-8 -*-import ossearch_dir = '/home' for root, dirs, files in os.walk(search_dir):for name in files:print os.path.join(root, name)
3、获取指定文件相关属性
#!/usr/bin/python # -*- coding: UTF-8 -*-import osfile_stat = os.stat('/etc/passwd') print file_stat print 'os.stat.st_uid = %s ' % (file_stat.st_uid) #获取文件所属用户ID print 'os.stat.st_gid = %s ' % (file_stat.st_gid) #获取文件所属组ID print 'os.stat.st_size = %s ' % (file_stat.st_size) #获取文件大小,以字节输出 print 'os.stat.st_atime = %s ' % (file_stat.st_atime) #获取最近访问时间 print 'os.stat.st_mtime = %s ' % (file_stat.st_mtime) #获取最近修改时间 print 'os.stat.st_ctime = %s ' % (file_stat.st_ctime) #获取创建时间。某些系统上(如Unix)是最新数据更改的时间。参考平台文档
4、根据关键字搜索指定目录下的文件,并输出文件名
#-*- coding:utf-8 -*-#import os import sys import reif len(sys.argv[1:]) == 0:print 'Please input search key words'sys.exit(1)search_keyword = sys.argv[1:] search_dir = os.getcwd() filelists = []for root, dirs, files in os.walk(search_dir):for filename in files:file_path = os.path.join(root, filename)pattern = '.*?'.join(search_keyword)regex = re.compile(pattern)fp = open(file_path,'r')for line in fp.readlines():match = regex.search(line)if match:print file_pathbreak
5、统计指定目录下的文件和文件夹大小,类似linux上的du功能
#-*- coding:utf-8 -*-#import osDIRECTORY = 'D:\\worktools'def getDirSize(dir):size = 0for root, dirs, files in os.walk(dir):size += sum([os.path.getsize(os.path.join(root, file)) for file in files])return sizeif __name__ == '__main__':for file in os.listdir(DIRECTORY):filepath = os.path.join(DIRECTORY,file)if os.path.isdir(filepath):dirsize = getDirSize(filepath)print "%s %.2fM" % (filepath,(dirsize/1024/1024))else:dirsize = os.path.getsize(os.path.join(DIRECTORY,filepath))print "%s %.2fM" % (filepath,(dirsize/1024/1024))
输出结果如下:
D:\worktools\alipay_wap_main.apk 46.00M D:\worktools\Beyond_Compare-Trial-YY.exe 31.00M D:\worktools\java 2393.00M D:\worktools\jd-gui-0.3.3.windows 0.00M D:\worktools\npp_7.3.3_Installer.exe 2.00M D:\worktools\oracle 11g 1243.00M D:\worktools\oracle 11g enterprise 2241.00M D:\worktools\teamviewer 12.00M D:\worktools\TortoiseSVN-1.9.4.27285-x64-svn-1.9.4.msi 17.00M D:\worktools\wps 356.00M D:\worktools\xmanager 41.00M D:\worktools\xmanager.rar 41.00M D:\worktools\zhaoshangyinxing_422.apk 39.00M D:\worktools\反编译 0.00M