模块-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命令大全

二、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)  #复制

 

posted @ 2018-09-16 01:19  航松先生  阅读(709)  评论(0)    收藏  举报