os ,shutil,send2trash模块汇总(tcy)

os-操作系统接口    2019/6/8

------------------------------------------------------------------------------

本文汇总os模块的常用 操作,包括os.path。

对于文件的高级操作参考shutil模块:https://mp.csdn.net/postedit/91346064

os模块:提供对目录或文件新建/删除/查看操作,对文件及目录的路径操作        
shutil:高级的 文件、文件夹、压缩包 处理模块        
        提供复制、移动、改名和删除文件 及 打包 压缩 解压
send2trash模块安全删除
        将文件夹和文件发送到计算机的垃圾箱或回收站
序号分类名称含义
1常量os.sep路径分隔符'\\'
2常量os.altsep分隔符'/'
3常量os.curdir文件路径分隔符'.'
4常量os.extsep文件扩展名之间分隔的符'.'
5常量os.devnullnull设备的路径'nul'
6常量os.linesep行终止符'\r\n'Windows。文本写用'\n'
7常量os.defpath  exec函数族如没制定PATH环境变量,默认查找os.defpath值作为子进程PATH的值
8常量os.pardir父目录常量字符串'..'
9常量os.pathsep路径分隔符分号';'
10环境变量os.environ dict包含环境变量 (修改) 
11环境变量os.environ["path"] 得到环境变量path的值     
12环境变量os.getenv(varname[,value])返回环境变量varname的值,os.getenv('path')如无返回value或None
13环境变量os.putenv(varname, value)设置环境变量os.putenv('PATH','/A/AA) 添加;不对os.environ产生影响应通过os.environ设置
14其他os.cpu_count() 
15其他os.ctermid()返回当前进程的控制终端
16其他os.strerror(code)返回错误码code对应的错误信息,当错误信息未知时,抛出一个ValueError异常。
17其他os.umask(mask)设置当前进程的权限掩码,并且返回设置前的权限掩码。
18其他os.uname()返回5元组当前操作系统信息,该5元组包括:(sysname, nodename, release, version, machine)
19其他os.urandom(2)返回一串适合加密用途的大小随机字节#b'\xa4"'
20属性os.name‘系统平台windows 'nt'
21属性os.path 模块获取文件的属性信息。
22文件和目录os.access(path, mode)判断文件是否可读写os.access("/tmp/foo.txt", os.R_OK)
23文件和目录os.chdir(path)改变当前工作目录;相当于CD命令; os.chdir('d:\\outlook')  
24文件和目录os.chflags(path, flags)设置路径的标记为数字标记。os.chflags( path, stat.SF_NOUNLINK )
25文件和目录 # 为文件设置标记,使得它不能被重命名和删除
26文件和目录os.chmod(path, mode)修改路径的权限os.chmod(path, stat.S_IWOTH)# 设置文件可以被其他用户写入
27文件和目录os.chown(path, uid, gid)设置文件的用户id和组id;unix
28文件和目录os.chroot(path)改变当前进程的根目录unix
29文件和目录os.fchdir(fd)通过文件描述符改变当前工作目录Unix 
30文件和目录os.getcwd() 得到当前目录;'C:\\Users\\Administrator'     
31文件和目录os.getlogin() 得到用户登录名称 'Administrator'    
32文件和目录os.lchflags(path, flags)设置路径的标记为数字标记,类似 chflags(),但是没有软链接unix
33文件和目录os.lchmod(path, mode)修改连接文件权限unix
34文件和目录os.lchown(path, uid, gid)更修改文件的uid和gid,类似 chown,但是不追踪链接。Unix
35文件和目录os.link(src, dst)创建硬链接即拷贝,dst = "/tmp/foo.txt";os.link( path, dst)
36文件和目录os.listdir(path)返回path文件夹包含的文件或文件夹列表os.listdir( r'C:\Users\Administrator' )
37文件和目录 for file in dirs:print (file)# 输出所有文件和文件夹
38文件和目录os.lstat(path)像stat()返回文件信息,如path是符号链接只处理该符号链接,源文件。;fstat的别名
39文件和目录os.major(device)从原始设备号中提取设备major号码 (用stat中st_dev或st_rdev field)
40文件和目录 info = os.lstat(path);major_dnum = os.major(info.st_dev);#0
41文件和目录 minor_dnum = os.minor(info.st_dev)#103
42文件和目录os.makedev(major, minor)以major和minor设备号组成一个原始设备号os.makedev(major_dnum, minor_dnum)#103
43文件和目录os.makedirs(path[, mode])递归文件夹创建像mkdir();如子目录存在或无法创建抛OSError
44文件和目录 path = "/tmp/home/monthly/daily";os.makedirs( path, 0o777 );
45文件和目录os.minor(device)从原始的设备号中提取设备minor号码 (使用stat中的st_dev或者st_rdev field )
46文件和目录os.mkdir(path[, mode])创建目录;可指定mode权限(和系统umask掩码进行运算)如目录存在FileExistsError引发
47文件和目录 path = "/tmp/home/monthly/daily/hourly";os.mkdir( path, 0755 )
48文件和目录os.mkfifo(path[, mode])创建命名管道,mode 为数字,默认为 0666 (八进制)
49文件和目录 path = "/tmp/hourly";os.mkfifo( path, 0644 )# 创建目录赋予权限
50文件和目录os.mknod(filename[, mode=0600, device])创建一个名为filename文件系统节点(文件,设备特别文件或者命名pipe)。
51文件和目录 filename = '/tmp/tmpfile';mode = 0600|stat.S_IRUSR;os.mknod(filename, mode)
52文件和目录os.pathconf(path, name)返回相关文件的系统配置信息。Unix
53文件和目录os.popen(command[, mode[, bufsize]])从一个 command 打开一个管道os.popen('mkdir nwdir','r', 1)
54文件和目录os.readlink(path)返回软链接所指向的文件的路径;Unix
55文件和目录os.remove(file)删除文件。如是目录抛出OSError;os.remove("aa.txt");os.listdir(os.getcwd())
56文件和目录os.removedirs(path)递归删除目录,可删除非空目录;os.removedirs("/test")
57文件和目录os.rename(src, dst)重命名文件或目录,若dst是目录或存在 则引发异常os.rename('/A/AA/a','/A/AA/b')
58文件和目录os.renames(old, new)递归对目录或文件更名;注意删除权限问题os.renames("aa1.txt","newdir/aanew.txt")
59文件和目录os.rmdir(path)删除空目录,如非空抛出OSError; os.rmdir("mydir")
60文件和目录os.scandir(path=None)返回给定路径的DirEntry对象的迭代器。
61文件和目录os.stat(path)获取path指定的路径的信息os.stat('/home/sy/Python3//01.py)
62文件和目录os.statvfs_result(self, /, *args, **kwargs)获取指定路径的文件系统统计信息
63文件和目录os.symlink(src, dst)创建一个软链接src = '/usr/bin/python';dst = '/tmp/python';os.symlink(src, dst)
64文件和目录os.unlink(path)删除文件路径同remove()
65文件和目录os.utime(path, times=None)设置路径的访问和修改时间。times是(atime, mtime)设置文件访问和修改时间
66文件和目录os.walk(top, topdown=True, οnerrοr=None, followlinks=False)目录树生成器。输出在目录中的文件名文件夹
67文件和目录shutil.rmtree(path)删除整个目录树
68文件描述符os.close(fd)关闭文件描述符 fd fd = os.open( "foo.txt", os.O_RDWR|os.O_CREAT );;os.close( fd )
69文件描述符os.closerange(fd_low, fd_high)关闭所有文件描述符[fd_low ,fd_high), 错误会忽略os.closerange( fd, fd)
70文件描述符os.dup(fd)复制文件描述符 fd;d_fd = os.dup( fd )  os.write(d_fd, "This is test".encode())
71文件描述符os.dup2(fd, fd2)将一个文件描述符 fd 复制到另一个 fd2;fd=open('txt','a'); os.dup2(f.fileno(), 1)
72文件描述符  # 将这个文件描述符代表的文件传递给1描述符指向文件也就是 stdout
73文件描述符os.fchmod(fd, mode)改变文件访问权限,文件由参数fd指定,mode是Unix下的文件访问权限
74文件描述符os.fchown(fd, uid, gid)修改文件所有权,修改文件的用户ID和用户组ID文件由文件描述符fd指定Unix
75文件描述符os.fdatasync(fd)强制将文件写入磁盘,文件由fd指定,不强制更新文件的状态信息Unix
76文件描述符os.fdopen(fd, "w+")通过文件描述符 fd 创建文件对象#fo = os.fdopen(fd, "w+")
77文件描述符os.fpathconf(fd, name)返回打开文件系统配置信息。Unix
78文件描述符os.fstat(fd)返回文件描述符fd的状态像stat()。
79文件描述符os.fstatvfs(fd)返回包含文件描述符fd的文件的文件系统的信息类似 statvfs(),Unix
80文件描述符os.fsync(fd)强制将文件描述符为fd的文件写入硬盘。os.write(fd, "This is test");
81文件描述符 fd = os.open( "foo.txt", os.O_RDWR|os.O_CREAT );os.write(fd, "This is test");os.fsync(fd)
82文件描述符os.ftruncate(fd, length)裁剪文件fd对应的文件, 最大不能超过文件大小。os.ftruncate(fd, 10)
83文件描述符os.isatty(fd)检查一个文件描述符fd指示的文件是否是一个tty字符设备文件 #False。
84文件描述符os.lseek(fd, pos, how)设置文件描述符 fd当前位置为pos, how= 0 ,1,2设置从文件开始,当前,尾部计算pos; 
85文件描述符os.open(file, flags[, mode])打开一个文件fd = os.open( "foo.txt", os.O_RDWR|os.O_CREAT )
86文件描述符os.pipe()创建一个管道. 返回一对文件描述符(r, w) 分别为读和写r, w = os.pipe() 
87文件描述符os.read(fd, n)从文件描述符 fd 中读取最多 n 个字节fd = os.open("f1.txt",os.O_RDWR);ret = os.read(fd,12)
88文件描述符os.truncate(fd, length)将由path指定的文件截断为特定长度
89文件描述符os.write(fd, str)写字符串到文件描述符 fd中. 返回实际写入的字符串长度
90进程os._exit(n)退出状态为n进程不清理,刷新stdio缓冲区等;用在fork之后子进程;正常退出用sys.exit(n)
91进程os.getegid()返回当前进程的有效用户组ID
92进程os.geteuid()返回当前进程的有效用户ID
93进程os.getuid()返回当前进程的用户ID
94进程os.getgid()返回当前进程的用户组ID
95进程os.getgroups()返回由当前进程附加的组ID编号组成的列表
96进程os.getresgid()返回(rgid, egid, sgid)当前进程实际用户组ID,有效的用户组ID和保存的用户组ID
97进程os.setegid(egid)设置当前进程的有效用户组ID
98进程os.seteuid(euid)设置当前进程的有效用户ID
99进程os.setgroups(groups)设置当前进程有关附加组ID,groups(int序列类型),只对超级用户有效
100进程os.setpgid(pid, pgrp)设置进程的用户组ID如果进程的ID为pid,所在用进程组ID为pgrp。
101进程os.setregid(rgid, egid)设置当前进程的有效用户组ID和实际用户组ID
102进程os.setresgid(rgid,egid,sgid)设置当前进程的实际组ID,有效组ID和保存的用户组ID。
103进程os.setresuid(ruid,euid,suid)设置当前进程的实际用户ID,有效用户ID和保存的用户组ID。
104进程os.setreuid(ruid, euid)设置当前进程的实际用户ID和有效用户ID
105进程os.getpgid(pid)返回进程ID为pid的进程的组ID,如果pid=0,则返回当前调用进程的进程组ID
106进程os.getpgrp()返回当前进程的进程组ID
107进程os.getppid()返回当前进程的父进程的ID
108进程os.getsid(pid)返回进程ID为pid的进程所在的会话的会话ID
109进程os.setsid()设置当前进程的会话ID
110进程os.setuid(uid)设置当前进程的用户ID
111进程os.abort()向调用该函数的进程发送一个SIGABRT信号,在Unix系统上默认的行为是产生一个core文件
112进程os.execl(path, arg0, arg1, ...)执行一个新程序,用新程序替换当前子进程的进程空间,该子进程从新程序的main函数开始执行
113进程os.execle(path, arg0, arg1, ..., env)Unix下新程序进程id是原来被替换的子进程的进程id。
114进程os.execlp(file, arg0, arg1, ...)原来子进程中打开的所有描述符默认都是可用的,不会被关闭
115进程os.execlpe(file, arg0, arg1, ..., env)execv*系列的函数表示其接受的参数是以一个list或者是一个tuple表示的参数表
116进程os.execv(path, args)execl*系列的函数表示其接受的参数是一个个独立的参数传递进去的。
117进程os.execve(path, args, env)exec*p*系列函数表示在执行参数传递过去的命令时使用PATH环境变量来查找命令
118进程os.execvp(file, args)exec*e系列函数表示在执行命令时读取该参数指定的环境变量作为默认的环境配置,
119进程os.execvpe(file, args, env)          最后的env参数必须是一个mapping对象,可以是一个dict类型的对象。
   os.execv('/bin/echo', ['foo', 'bar'])#bar foo执行一个新程序取代当前进程
   os.execl('/usr/bin','argc任意','test.py','test.py的参数,...')
120进程os.fork()fork出一个子进程,在子进程中返回0,在父进程中返回子进程ID,如果发生错误,则抛出OSError异常
121进程os.nice(increment)增加increment到进程的nice值,返回一个新的nice值。
122进程os.wait()等待任何一个子进程结束,返回一个tuple,包括子进程的进程ID和退出状态信息
123进程os.wait3(options)和waitpid()类似,不需指定pid,返回3元组,包括结束子进程进程id,退出状态及资源使用信息
124进程os.waitpid(pid,options)等待完成给定的过程 参数2:os.WNOHANG - 如没有子进程退出不阻塞waitpid()调用
125进程 os.WCONTINUED - 如子进程从stop状态变为继续执行,则返回进程自前一次报告以来的信息。
126进程 os.WUNTRACED - 如果子进程被停止过而且其状态信息还没有报告过,则报告子进程的信息。
128进程os.getpid()返回当前进程ID #12100
129进程os.kill(pid,sig )将信号sig发送到进程pid。模块中定义了h os t平台上可用的特定信号的常量signal。
130进程os.spawnl(模式,路径,... )在新进程中执行程序路径。
131进程os.spawnle(模式,路径,...,env )在新进程中执行程序路径。
132进程os.spawnlp(模式,文件,... )在新进程中执行程序路径。os.spawnlp(os.P_WAIT, 'cp', 'cp', 'index.html', '/dev/null')
133进程os.spawnlpe(模式,文件,...,env )在新进程中执行程序路径。
134进程os.spawnv(模式,路径,args )在新进程中执行程序路径。
135进程os.spawnve(mode,path,args,env )在新进程中执行程序路径。
136进程os.spawnvp(模式,文件,args )在新进程中执行程序路径。
137进程os.spawnvpe(模式,文件,args,env )在新进程中执行程序路径。os.spawnvpe(os.P_WAIT, 'cp', ['cp', 'index.html', '/dev/null'], os.environ)
138进程os.startfile(路径[,操作] )使用其关联的应用程序启动文件。
139进程os.system(cmd) 运行shell命令;os.system('ls -al')#获取隐藏文件
140进程os.times()返回当前的全局进程时间。os.times() #nt.times_result(user=7.004444899999999, 
141进程                                system=6.552042, children_user=0.0, children_system=0.0, elapsed=0.0)
142进程1处理system(),wait()和waitpid()返回的状态信息:
143进程1os.WCOREDUMP(status)如果一个core文件被创建,则返回True,否则返回False。
144进程1os.WIFCONTINUED(status)如果一个进程被停止过,并且继续执行,则返回True,否则返回False。
145进程1os.WIFSTOPPED(status)如果子进程被停止过,则返回True,否则返回False。
146进程1os.WIFSIGNALED(status)如果进程由于信号而退出,则返回True,否则返回False。
147进程1os.WIFEXITED(status)如果进程是以exit()方式退出的,则返回True,否则返回False。
148进程1os.WEXITSTATUS(status)如WIFEXITED(status)返回True,则返回一整数,该整数是exit()调用参数。否则返回值是未定义
149进程1os.WSTOPSIG(status)返回导致进程停止的信号
150进程1os.WTERMSIG(status)返回导致进程退出的信号

 

2.os实例

# 实例1: 
os.getcwd()                         # 'C:\\python37'   C:\python37\Lib
os.chdir(r'C:\python36\test_chdir') #修改当前工作目录成功返回True
os.system('mkdir today')            # Run the command mkdir in the system shell
# ------------------------------------------------------------------------------

# 实例2.1:查看指定路径中所有文件,文件夹
import os
for root, dirs, files in os.walk(r"D:\A"):
    try:
       print('directory < ' + root + ' >')
       for d in dirs:
         print(d)
       for f in files:
         print(f)
    except os.OSError as e:
        print(os.strerror(e.errno))
"""
directory < D:\A >
AA
directory < D:\A\AA >
test.txt
"""
# ------------------------------------------------------------------------------
# 实例2.2:查看指定路径中所有文件,文件夹
for root,dirs,files in os.walk(r"D:\A",topdown=False):
    for name in files:
        print(os.path.join(root, name))
    for name in dirs:
        print(os.path.join(root, name))
"""
D:\A\AA\test.txt
D:\A\AA
"""
# ------------------------------------------------------------------------------
# 实例3.1:标准文件读写
import os
os.makedir('pathdir')     #创建路径
os.makedirs(r'd:\pathdir')#创建路径
f = open("text.txt",'w+')#直接打开一个文件,如果文件不存在就创建文件

f.read([size])          #size为读取的长度,以byte为单位
f.readline([size])      #读一行,如果定义了size,有可能返回的只是一行的一部分
f.readlines([size])     #把文件每一行作为一个list的一个成员,并返回这个list
   # 如果提供size参数,size是表示读取内容的总长,也就是说可能只读到文件的一部分。
f.write(str)            #把str写到文件中,write()并不会在str后加上一个换行符
f.writelines(seq)       #把seq的内容全部写到文件中(多行一次性写入)。不会在每行后面加上任何东西。
f.close()               #关闭文件。
f.flush()               #把缓冲区的内容写入硬盘

f.fileno()              #返回一个长整型的”文件标签“
f.isatty()              #文件是否是一个终端设备文件(unix系统中的)
f.tell()                #返回文件操作标记的当前位置,以文件的开头为原点
f.next()                #返回下一行,并将文件操作标记位移到下一行。
f.seek(offset[,whence]) #文件定位到offset位置(whence=0,1,2开头,当前,末尾为原点进行计算)
    # 如文件以a或a+的模式打开,每次进行写操作时,文件操作标记会自动返回到文件末尾。

f.truncate([size])  #把文件裁成规定的大小,默认的是裁到当前文件操作标记的位置。
    # 如size比文件大小还大,可能不改变文件,也可能用0或随机内容把文件补到相应的大小
# ------------------------------------------------------------------------------
实例3.2:文件描述符读写文件

# fd读写标志:
""" 
os.O_RDONLY 只读
os.O_WRONLY 只写
os.O_RDWR   读写
os.O_APPEND 附加;写操作前将文件指针移动到文件末尾
os.O_CREAT  创建文件,写入文件存在无效
os.O_EXCL   如文件存在返回错误值。仅适用与_O_CREAT一起使用时

os.O_TRUNC  文件内容清除
"""
import os
from datetime import datetime as dt

path='D:\\A\\AA\\test.txt'
fd = os.open(path,os.O_RDWR|os.O_APPEND|os.O_CREAT)# 获取文件对象
print('fd=',fd)# fd=<_io.TextIOWrapper name='text.txt' mode='w+' encoding='cp936'>

# 写入字符串
str1 = "current time is "+dt.now().strftime("%Y-%m-%d %H:%M:%S")+'\n'
ret = os.write(fd,bytes(str1, 'UTF-8'))#写入的位数为ret=36

# 读文件
os.lseek(fd, 0, 0)     #移动文件指针到文件开头
result=os.read(fd,1000)
print(result.decode())
# 关闭文件
os.close(fd)

3.备注 退出状态 

 

NameRemark
os.EX_OK  正常退出
os.EX_USAGE  命令执行不正确,如命令参数错误
os.EX_DATAERR  输入数据有误
os.EX_NOINPUT  输入文件不存在或者不可读
os.EX_NOUSER  指定的用户不存在
os.EX_NOHOST  指定的主机id不存在
os.EX_UNAVAILABLE  请求的服务不可用
os.EX_SOFTWARE  内部软件错误
os.EX_OSERR  操作系统错误
os.EX_OSFILE  系统文件不存在
os.EX_CANTCREAT  无法创建指定的输出文件
os.EX_IOERR  在进行I/O操作时出错
os.EX_PROTOCOL  协议切换操作非法,或者协议切换不可用
os.EX_NOPERM  没有权限执行该操作
os.EX_CONFIG  配置错误
方法说明
 path=r'C:\Users\Administrator\A\AA\test.txt'
ntpath.splitunc(path)把路径分割为加载点与文件# ('', 'C:\\Users\\Administrator\\A\\AA\\test.txt')
os.path.abspath(path)相对路径转绝对路径'./boys'#相对
os.path.basename(path)返回文件名 'test.txt'
os.path.commonpath([])返回最长公共子路径;['/usr/lib', '/usr/local/lib']#'\\usr'格式相同切非空否则异常
os.path.commonprefix([])返回共有最长路径前缀['/usr/lib', '/usr/local/lib']#'/usr/l'
os.path.dirname(path)返回文件路径(不含文件名)'C:\\Users\\Administrator\\A\\AA'
os.path.exists(filepath[name])判断是否存在文件或目录#True  如未授os.stat()文件权限返回Fasle(即使存在)
os.path.expanduser(path)把path中包含的"~"和"~user"转换成用户目录
os.path.expandvars(path)根据环境变量的值替换path中包含的"$name"和"${name}"
os.path.getatime(path)返回最近访问时间(浮点型秒数)无则抛异常#1559889034.6349573
os.path.getctime(path)路径的创建时间;无则抛OSError#1559889034.6349573
os.path.getmtime(path)获取文件的修改时间#1559890195.4933546
os.path.getsize(path)返回文件大小字节如是目录返回0,无则抛OSError
os.path.isabs(path)判断是否为绝对路径#True
os.path.isdir(path)检测是否是文件夹#False
os.path.isfile(path)判断路径是否为文件#True
os.path.islink(path)判断路径是否为链接#False
os.path.ismount(path)判断路径是否为挂载点
os.path.join(path1[, path2[, ...]])目录文件名合成一个路径os.path.join('C:\\','A\\','test.txt')#'C:\\A\\test.txt'
os.path.lexists(path)路径存在则返回True,路径损坏也返回True#True
os.path.normcase(path)规范化路径名小写和反斜杠 #'c:\\users\\administrator\\a\\aa\\test.txt'异常抛出错误
os.path.realpath(path)返回规范路径,消除路径中遇到的任何符号链接(如果操作系统支持它们)。
os.path.relpath(path[, start])从start开始计算相对路径os.path.relpath(path,'C:\\Users\\Administrator')
 'A\\AA\\test.txt'
os.path.samefile(path1, path2)判断目录或文件是否相同
os.path.sameopenfile(fp1, fp2)返回True如果文件描述符fp1和fp2指向同一文件
os.path.samestat(stat1, stat2)判断stat tuple stat1和stat2是否指向同一个文件
os.path.split(path)分割文件名与目录 #('C:\\Users\\Administrator\\A\\AA', 'test.txt')
os.path.splitdrive(path)回驱动器名和路径 #('C:', '\\Users\\Administrator\\A\\AA\\test.txt')
os.path.splitext(path)分离文件名和扩展名 #('C:\\Users\\Administrator\\A\\AA\\test', '.txt')
os.path.supports_unicode_filenames设置是否支持unicode路径名#True
os.path.walk(path, visit, arg)遍历path进入每个目录都调用visit(arg, dirname, names),目录名,所有文件名
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值