模块-os及文件夹的操作、shutil模块移动和复制文件
本节内容:
- os模块
- os.path模块
- os其他模块、函数或接口
- os模块的应用
使用前 import os导入模块
一、os模块
os.sep 可以取代操作系统特定的路径分割符
os.linesep 字符串给出当前平台使用的行终止符。例如,Windows使用'\r\n',Linux使用'\n' 而Mac使用'\r'。
os.name 字符串指示你正在使用的平台。比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'
os.getcwd() 函数得到当前工作目录,
os.getenv()和os.putenv() 函数分别用来读取和设置环境变量。
os.listdir(dirname): 列出dirname下的目录和文件
os.remove() 函数用来删除一个文件。
os.curdir: 返回但前目录('.')
os.chdir(dirname): 改变工作目录到dirname
getatime(path):文件或文件夹的最后访问时间,从新纪元到访问时的秒数
getmtime(path):文件或文件夹的最后修改时间
getctime(path):文件或文件夹的创建时间
import os # 获取当前工作目录,即当前python脚本工作的目录路径 print(os.path.dirname(os.path.dirname(__file__)))#获取项目的路径 print(os.getcwd())#E:\PycharmProjects\PythonStudy\test # print(os.chdir("E:/PycharmProjects/PythonStudy/test/bin"))# 改变当前脚本工作目录;相当于shell下cd print(os.curdir)# 返回当前目录: ('.') print(os.pardir)# 获取当前目录的父目录字符串名:('..') # os.makedirs('dirname1/dirname2')# 可生成多层递归目录 # os.removedirs('dirname1/dirname2') #若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推 # os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirname # os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname # print(os.listdir('E:/PycharmProjects/PythonStudy/test/'))#列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印 # os.remove("E:/PycharmProjects/PythonStudy/test/bin/tmp")#删除一个文件 # os.rename("oldname","newname") 重命名文件/目录 # print(os.stat('E:/PycharmProjects/PythonStudy/test/test12.py')) #获取文件/目录信息 # print(os.sep)# 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/" # print(os.linesep)#输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n" print(os.pathsep)#输出用于分割文件路径的字符串 print(os.name)#输出字符串指示当前使用平台。win->'nt'; Linux->'posix' os.system("bash command") #运行shell命令,直接显示 # print(os.environ)#获取系统环境变量 # print(os.path.abspath('E:/PycharmProjects/PythonStudy/test/'))#返回path规范化的绝对路径 print(os.path.split('E:/PycharmProjects/PythonStudy/test/'))#将path分割成目录和文件名二元组返回 # os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素 # os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素 # os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False # os.path.isabs(path) 如果path是绝对路径,返回True # os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False # os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False # os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 # os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间 # os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
二、os.path模块
os.path.isfile()和os.path.isdir()函数分别检验给出的路径是一个文件还是目录,返回bool值
os.path.exists()函数用来检验给出的路径是否真地存在 返回bool
os.path.getsize(name):获得文件大小,如果name是目录返回0L 返回long 单位是字节
os.path.abspath(name):获得绝对路径
os.path.normpath(path):规范path字符串形式, 结果一般情况下把/变为//,
os.path.split(name):将name分割成路径名和文件名,结果为(路径名,文件名.文件扩展名)(事实上,如果你完全使用目录,它也会将最后一个目录作为文件名而分离,同时它不会判断文件或目录是否存在)
os.path.splitext(filename):分离文件名与扩展名 结果为(filename,扩展名) 如果参数为一个路径 则返回(路径,'')
os.path.join(path,name): 连接目录与文件名或目录 结果为path/name
os.path.basename(path):返回文件名 实际为把path的最后一个"/"分割,返回后者。不管参数是一个路径还是文件 与os.path.split(name)相同 不同之处后者返回两个值得元组
os.path.dirname(path): 返回文件路径 实际为把path的最后一个"/"分割,返回前者。不管参数是一个路径还是文件
os.system()函数用来运行shell命令
三、os其他模块、函数或接口
1、os模块包装了不同操作系统的通用接口,使用户在不同操作系统下,可以使用相同的函数接口,返回相同结构的结果。
os.name:返回当前操作系统名称('posix', 'nt', 'os2', 'mac', 'ce' or 'riscos')
2、os中定义了一组文件、路径在不同操作系统中的表现形式参数,如:
os.sep(文件夹分隔符,windows中是 \ )
os.extsep(扩展名分隔符,windows中是 . )
os.pathsep(目录分隔符,windows中是 ; )
os.linesep(换行分隔符,windows中是 \r\n )
3、os中有大量文件、路径操作的相关函数,如:
listdir(path):列举目录下的所有文件
makedir(path):创建文件夹,注:创建已存在的文件夹将异常
makedirs(path):递归式的创建文件夹,注:创建已存在的文件夹将异常
remove(filename):删除一个文件
rmdir(path):删除一个文件夹,注:删除非空的文件夹将异常
removedirs(path):递归的删除文件夹,直到有一级的文件夹非空,注:文件夹路径不能以'\'结束
rename(src,dst):给文件或文件夹改名(可以改路径,但是不能覆盖目标文件)
renames(src,dst):递归式的给文件或文件名改名
walk(path):列举path下的所有文件、文件夹
4、os中与进程相关的操作,如:
execl(path):运行一个程序来替代当前进程,会阻塞式运行
_exit(n):退出程序
startfile(filename):用与文件关联的程序运行,关联程序打开后,立即返回
system(cmd):运行一个程序或命令,会立即返回,并在cmd执行完成后,会返回cmd退出代码
os.path:在不同的操作系统中调用不同的模块,是一个可import的模块,这个模块中提供很多有用的操作:
abspath(path):返回path的绝对路径,若path已经是绝对路径了,则保持。
basename(path):返回path中的文件名。
commonprefix(list):返回list中的统一前缀,用于获得一组字符串的左起相同的内容
dirname(path):返回path中的文件夹部分,结果不包含'\'
exists(path):文件或文件夹是否存在
getatime(path):文件或文件夹的最后访问时间,从新纪元到访问时的秒数
getmtime(path):文件或文件夹的最后修改时间
getctime(path):文件或文件夹的创建时间
getsize(path):文件或文件夹的大小,若是文件夹返回0
isabs(path):返回是否是绝对路径
isfile(path):返回是否是文件路径
isdir(path):返回是否是文件夹路径
islink(path):返回是否是快捷方式
join(path1,path2,...):将path进行组合,若其中有绝对路径,则之前的path将被删除
normcase(path):转换路径中的间隔符
normpath(path):转换路径为系统可识别的路径
realpath(path):转换路径为绝对路径
split(path):将路径分解为(文件夹,文件名)
splitext(path):将路径分解为(其余部分,.扩展名),若文件名中没有扩展名,扩展名部分为空字符串
在操作与系统不支持的对象时,抛出OSError异常。
四、os模块的应用
1、判断文件夹是否存在
>>> import os >>> os.path.exists('d:/assist') True >>> os.path.exists('d:/assist/getTeacherList.py') True >>> os.path.isfile('d:/assist') False >>> os.path.isfile('d:/assist/getTeacherList.py') True >>> os.makedirs('d:/assist/set') >>> os.path.exists('d:/assist/set') True
2、判断文件夹是否为空
import os workpath='目录' if not os.list(workpath): print('目录为空')
3、遍历文件夹
>>> def Test2(rootDir): ... for lists in os.listdir(rootDir): ... path = os.path.join(rootDir, lists) ... print path ... if os.path.isdir(path): ... Test2(path) ... >>> Test2("F:\zr")
遍历文件夹是一个很常用的功能吧。这里分别用两种方法实现:
第一种:使用os.walk:-------输出总是先文件夹后文件名的
# -*- coding: utf-8 -*- import os def Test1(rootDir): list_dirs = os.walk(rootDir) for root, dirs, files in list_dirs: for d in dirs: print (os.path.join(root, d)) for f in files: print (os.path.join(root, f)) Test1("F:")
第二种:使用os.listdir:----------按照目录树结构以及按照首字母排序进行输出的
# -*- coding: utf-8 -*- import os def Test2(rootDir): for lists in os.listdir(rootDir): path = os.path.join(rootDir, lists) print (path) if os.path.isdir(path): Test2(path) Test2("F:");
打印出的目录树
import os def Test3(rootDir, level=1): if level==1: print (rootDir) for lists in os.listdir(rootDir): path = os.path.join(rootDir, lists) print ('│ '*(level-1)+'│--'+lists) if os.path.isdir(path): Test3(path, level+1) Test3("F:")
五、shutil模块移动和复制文件
stutil模块的具体介绍见:https://www.cnblogs.com/wzh313/articles/9652139.html
shutil.move(srcfile,dstfile) #移动文件
shutil.copyfile(srcfile,dstfile) #复制文件
以下逻辑,用时参考。
1 # -*- coding: utf-8 -*- 2 #!/usr/bin/python 3 #test_copyfile.py 4 5 import os,shutil 6 ##移动文件 7 def mymovefile(srcfile,dstfile): 8 if not os.path.isfile(srcfile): 9 print("%s not exist!"%(srcfile)) 10 else: 11 fpath,fname=os.path.split(dstfile) #分离文件名和路径 12 if not os.path.exists(fpath): 13 os.makedirs(fpath) #创建路径 14 shutil.move(srcfile,dstfile) #移动文件 15 print("move %s -> %s"%( srcfile,dstfile)) 16 17 def mycopyfile(srcfile,dstfile): 18 if not os.path.isfile(srcfile): 19 print("%s not exist!"%(srcfile)) 20 else: 21 fpath,fname=os.path.split(dstfile) #分离文件名和路径 22 if not os.path.exists(fpath): 23 os.makedirs(fpath) #创建路径 24 shutil.copyfile(srcfile,dstfile) #复制文件 25 print("copy %s -> %s"%( srcfile,dstfile)) 26 27 srcfile='/Users/xxx/git/project1/test.sh' 28 dstfile='/Users/xxx/tmp/tmp/1/test.sh' 29 mymovefile(srcfile,dstfile) #移动 30 mycopyfile(srcfile,dstfile) #复制

浙公网安备 33010602011771号