Python的标准库中的os模块包含普遍的操作系统功能。这个模块的作用主要是提供与平台无关的功能。也就是说os模块能够处理平台间的差异问题,使得编写好的程序无需做任何改动就能在另外的平台上运行。当然,这个模块只是提供了一个轻便的方法使用要依赖操作系统的功能。有些特定的功能还得使用特定的模块,比如:如何只是想读或写文件,请使用open();如果想操作文件路径,请使用os.path模块;如果想在命令行中,读入所有文件的所有行,请使用fileinput模块;使用tempfile模块创建临时文件和文件夹;更高级的文件和文件夹处理,请使用shutil模块。如果想要了解os模块的所有内容,可以使用dir(os)方法查看。模块变量os.error内建OSError exception的别名。os.name导入依赖操作系统模块的名字,指示你正在使用的平台。下面是目前被注册的名字:‘posix’, ’nt’, ‘mac’, ‘os2’, ‘ce’, ‘java’, ‘riscos’.os.environ一个mapping对象表示环境。例如,environ[‘HOME’] ,表示的你自己home文件夹的路径(某些平台支持,windows不支持) ,它与C中的getenv(“HOME”)一致。号:923414804 群里有志同道合的小伙伴, 互帮互助。群里有视频学习教程和PDF,一起学习,共同进步! 加群免费获取数十套PDF资料,助力python学习这个mapping对象在os模块第一次导入时被创建,一般在python启动时,作为site.py处理过程的一部分。在这一次之后改变environment不 影响os.environ,除非直接修改os.environ。注:putenv()不会直接改变os.environ,所以最好是修改os.environ。注:在一些平台上,包括FreeBSD和Mac OS X,修改environ会导致内存泄露。参考 putenv()的系统文档。如果没有提供putenv(),mapping的修改版本传递给合适的创建过程函数,将导致子过程使用一个修改的environment。如果这个平台支持unsetenv()函数,你可以删除mapping中的项目。当从os.environ使用pop()或clear()删除一个项目时,unsetenv()会自动被调用(版本2.6)。os.curdir操作系统用此常数字符串作为当前文件夹的引用。os.pardir操作系统用此常数字符串作为父文件夹的引用。os.sep系统使用此字符来分割路径。os.altsep系统使用另外一个字符来分割路径,如果只有一个分割字符存在,则是None。os.extsep分割基本文件名和扩展名的字符。os.pathsep系统使用此字符来分割搜索路径(像PATH),例如POSIX上’:’,Windows上的’;’,也可以通过os.path。os.defpath默认的搜索路径用作 execp()和spawnp()如果环境没有 ‘PATH’。 也可以通过os.path。os.linesep当前平台上的换行符字符串. 在POSIX上是’n’,或者 在Windows上是’rn’ . 不要使用 os.linesep作为换行符,当写入文本文件时 (默认); 使用’n’代替, 在所有平台上。os.devnull空设备的文件路径.例如:POSIX上 ‘/dev/null’ . 也可以通过os.path。文件和文件夹os.access(path, mode)使用现在的uid/gid尝试访问path。注大部分操作使用有效的uid/gid, 因此运行环境可以在 suid/sgid环境尝试,如果用户有权访问path。 mode为F_OK,测试存在的path,或者它可以是包含R_OK, W_OK和X_OK或者R_OK, W_OK和X_OK其中之一或者更多。如果允许访问返回 True , 否则返回False。查看Unix手册access(2) 获取更多信息。在unix,Windows中有效。*注: 使用access()去测试用户是否授权. 在实际使用open()打开一个文件前测试会创建一个安全漏洞前 , 因为用户会利用这短暂时间在检测和打开这个文件去修改它。即使access()表明它将succeed,但I/O 操作也可能会失败, 如网络文件系统。os.F_OK作为access()的mode参数,测试path是否存在.os.R_OK包含在access()的mode参数中 , 测试path是否可读.os.W_OK包含在access()的mode参数中 ,测试path是否可写.os.X_OK包含在access()的mode参数中 ,测试path是否可执行.os.chdir(path)改变当前工作目录。 在unix,Windows中有效。os.fchdir(fd)通过打开的文件描述符改变当前工作目录。在unix中有效,请查看相关文档.。os.getcwd()返回当前工作目录的字符串, 在unix,Windows中有效。os.getcwdu()返回一个当前工作目录的Unicode对象。在unix,Windows中有效。os.chroot(path)改变根目录为path。在unix中有效,请查看相关文档.。os.chmod(path, mode)改变path的mode到数字mode。在unix,Windows中有效。mode为下面中的一个 (在stat模块中定义)或者bitwise或者它们的组合:?stat.S_ISUID?stat.S_ISGID?stat.S_ENFMT?stat.S_ISVTX?stat.S_IREAD?stat.S_IWRITE?stat.S_IEXEC?stat.S_IRWXU?stat.S_IRUSR?stat.S_IWUSR?stat.S_IXUSR?stat.S_IRWXG?stat.S_IRGRP?stat.S_IWGRP?stat.S_IXGRP?stat.S_IRWXO?stat.S_IROTH?stat.S_IWOTH?stat.S_IXOTH注: *尽管Windows支持chmod(), 你只可以使用它设置只读 flag (通过stat.S_IWRITE和stat.S_IREAD 常数或者一个相对应的整数)。所有其它的 bits都忽略了.os.chown(path, uid, gid)改变path的所属用户和组。在unix中有效,请查看相关文档.。os.link(source, link_name)在unix中有效,请查看相关文档.。os.listdir(path)返回path指定的文件夹包含的文件或文件夹的名字的列表。 这个列表以字母顺序。 它不包括 ‘.’ 和’..’ 即使它在文件夹中。在unix,Windows中有效。Changed in version 2.3:在Windows NT/2k/XP 和Unix, 如果文件夹是一个Unicode object, 结果将是 Unicode objects列表。不能解码的文件名将仍然作为string objects返回.os.lstat(path)像stat(),但是没有符号链接。 这是stat()的别名 在某些平台上,例如Windows。os.mkfifo(path[, mode])创建命名管道。在unix中有效,请查看相关文档.。os.mknod(filename[, mode=0600, device])创建一个名为filename文件系统节点(文件,设备特别文件或者命名pipe)。 mode指定创建或使用节点的权限, 组合 (或者bitwise) stat.S_IFREG, stat.S_IFCHR, stat.S_IFBLK, 和stat.S_IFIFO (这些常数在stat模块). 对于 stat.S_IFCHR和stat.S_IFBLK, 设备定义了 最新创建的设备特殊文件 (可能使用 os.makedev()),其它都将忽略。新增version 2.3。os.major(device)从原始的设备号中提取设备major号码 (使用stat中的st_dev或者st_rdev field)。新增version 2.3。os.minor(device)从原始的设备号中提取设备minor号码 (使用stat中的st_dev或者st_rdev field )。新增version 2.3。os.makedev(major, minor)以major和minor设备号组成一个原始设备号。新增version 2.3.os.mkdir(path[, mode])以数字mode的mode创建一个名为path的文件夹.默认的 mode 是 0777 (八进制)。 在有些平台上, mode是忽略的. 当使用时。这当前的掩码值是first masked out。 在unix,Windows中有效。也可以用于创建临时文件夹; 查看tempfile模块tempfile.mkdtemp()函数。os.makedirs(path[, mode])递归文件夹创建函数。像mkdir(), 但创建的所有intermediate-level文件夹需要包含子文件夹。抛出一个error exception如果子文件夹已经存在或者不能创建。 默认的 mode 是 0777 (八进制). 在有些平台上, mode是忽略的。当使用时。这当前的掩码值是first masked out。os.pathconf(path, name)在unix中有效,请查看相关文档。os.pathconf_names在unix中有效,请查看相关文档。os.readlink(path)返回符号链接所指向的文件。在unix中有效,请查看相关文档。os.remove(path)删除路径为path的文件。如果path 是一个文件夹,将抛出OSError; 查看下面的rmdir()删除一个 directory。 这和下面的unlink()函数文档是一样的。在Windows,尝试删除一个正在使用的文件将抛出一个exception;在Unix,directory入口会被删除,但分配给文件的存储是无效的,直到原来的文件不再使用。 在unix,Windows中有效。os.removedirs(path)递归删除directorie。 像rmdir(), 如果子文件夹成功删除, removedirs()才尝试它们的父文件夹,直到抛出一个error(它基本上被忽略,因为它一般意味着你文件夹不为空)。例如, os.removedirs(‘foo/bar/baz’) 将首先删除 ‘foo/bar/baz’, 然后删除 ‘foo/bar’ 和 ‘foo’ 如果它们是空的。 如果子文件夹不能被成功删除,将抛出OSError。os.rename(src, dst)重命名file或者directory src 到dst.如果dst是一个存在的directory, 将抛出OSError. 在Unix, 如果dst在存且是一个file,如果用户有权限的话,它将被安静的替换. 操作将会失败在某些Unix 中如果src和dst在不同的文件系统中. 如果成功, 这命名操作将会是一个原子操作 (这是POSIX 需要). 在 Windows上, 如果dst已经存在, 将抛出OSError,即使它是一个文件。 在unix,Windows中有效。os.renames(old, new)递归重命名文件夹或者文件。像rename()。新增version 1.5.2.os.rmdir(path)删除path文件夹. 仅当这文件夹是空的才可以, 否则, 抛出OSError. 要删除整个文件夹树, 可以使用shutil.rmtree(). 在unix,Windows中有效。os.stat(path)执行一个stat()系统调用在给定的path上。返回值是一个对象,属性与stat结构成员有关: st_mode (保护位), st_ino (inode number), st_dev (device), st_nlink (number of hard links), st_uid (所有用户的id), st_gid (所有者group id), st_size (文件大小, 以位为单位), st_atime (最近访问的时间), st_mtime (最近修改的时间), st_ctime (依赖于平台;在Unix上是metadata最近改变的时间,或者在 Windows上是创建时间):import osstatinfo = os.stat(‘somefile.txt’)print statinfo如果stat_float_times()返回True,time值是floats,以second进行计算。 一秒的小数部分也会显示出来, 如果系统支持. 在Mac OS, 时间常常是 floats。查看 stat_float_times() 获取更多信息。在一些Unix系统上(例如 Linux), 下面的属性也许是有效的: st_blocks (为文件分配了多少块), st_blksize (文件系统blocksize), st_rdev (设备型号如果是一个inode设备). st_flags (用户为文件定义的flags)。在unix,Windows中有效。os.stat_float_times([newvalue])决定stat_result是否以float对象显示时间戳。os.statvfs(path)在unix中有效,请查看相关文档.。os.symlink(source, link_name)创建一个符号链接。在unix中有效,请查看相关文档。os.tempnam([dir[, prefix]])为创建一个临时文件返回一个唯一的path。在Windows使用TMP,依赖于使用的C库。在unix,Windows中有效。警告: 使用tempnam() 对于symlink攻击是一个漏洞; 考虑使用tmpfile()代替。os.tmpnam()为创建一个临时文件返回一个唯一的path。在unix,Windows中有效。*Warning: *使用tempnam() 对于symlink攻击是一个漏洞; 考虑使用tmpfile()代替.os.TMP_MAXtmpnam() 将产生唯一名字的最大数值。os.unlink(path)删除 file路径. 与remove()相同; 在unix,Windows中有效。os.utime(path, times)返回指定的path文件的访问和修改的时间。如果时间是 None, 则文件的访问和修改设为当前时间 。 否则, 时间是一个 2-tuple数字, (atime, mtime) 用来分别作为访问和修改的时间。在unix,Windows中有效。os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])输出在文件夹中的文件名通过在树中游走,向上或者向下。在根目录下的每一个文件夹(包含它自己), 产生3-tuple (dirpath, dirnames, filenames)【文件夹路径, 文件夹名字, 文件名】。dirpath是一个字符串, directory的路径. dirnames在dirpath中子文件夹的列表 (不包括 ‘.’ ‘..’)。filenames 文件是在dirpath不包含子文件夹的文件名的列表. 注: 列表中的names不包含path.为获得dirpath中的一个文件或者文件夹的完整路径 (以顶目录开始)或者, 操作 os.path.join(dirpath, name)。如果optional参数topdown为True或者not指定, 一个directory的3-tuple将比它的任何子文件夹的3-tuple先产生 (directories 自上而下)。如果topdown为 False, 一个directory的3-tuple将比它的任何子文件夹的3-tuple后产生 (directories 自下而上)。当topdown为True,调用者可以修改列表中列出的文件夹名字(也可以使用del或者slice), walk() 仅仅递归每一个包含在dirnames中的子文件夹; 可以减少查询, 利用访问的特殊顺序,或者甚至 告诉 walk() 关于文件夹的创建者或者重命名在它重新walk()之前。修改文件名当topdown 为False时是无效的, 因为在bottom-up模式中在dirnames中的directories比dirpath 它自己先产生 。默认listdir()的errors将被忽略。 如果optional参数onerror被指定,它应该是一个函数; 它调用时有一个参数, 一个OSError实例. 报告这错误后,继续walk,或者抛出exception终止walk。注意filename是可用的的 ,exception对象的filename属性。默认, walk() 不会进入符号链接 。新增version 2.6。获取进程IDos.ctermid()返回进程控制终端的文件名。在unix中有效,请查看相关文档.。os.getegid()返回当前进程有效的group的id。对应于当前进程的可执行文件的"set id “的bit位。在unix中有效,请查看相关文档。os.geteuid()返回当前进程有效的user的id。在unix中有效,请查看相关文档。os.getgid()返回当前进程当前group的id。在unix中有效,请查看相关文档。os.getgroups()返回当前进程支持的groups的id列表。在unix中有效,请查看相关文档。os.getlogin()返回进程控制终端登陆用户的名字。在大多情况下它比使用environment变量LOGNAME来得到用户名,或使用pwd.getpwuid(os.getuid())[0] 得到当前有效用户id的登陆名更为有效。在unix中有效,请查看相关文档。os.getpgid(pid)返回pid进程的group id。如果pid为0,返回当前进程的group id。在unix中有效,请查看相关文档。os.getpgrp()返回当前进程组的id。在unix中有效,请查看相关文档。os.getpid()返回当前进程的id。在unix,Windows中有效。os.getppid()返回当前父进程的id。在unix中有效,请查看相关文档。os.getuid()返回当前当前进程用户的id。在unix中有效,请查看相关文档。环境变量os.getenv(varname[, value])返回environment变量varname的值,如果value不存在,默认为None。在大多版本的unix,Windows中有效。os.putenv(varname, value)设置varname环境变量为value值。此改变影响以os.system(), popen() 或 fork()和execv()启动的子进程。在大多版本的unix,Windows中有效。当支持putenv()时,在os.environ分配项目时,自动调用合适的putenv()。然而,调用putenv() 不会更新os.environ,所以直接设置os.environ的项。设置进程IDos.setegid(egid)设置当前进程有效组的id。在unix中有效,请查看相关文档。os.seteuid(euid)设置当前进程有效用户的id。在unix中有效,请查看相关文档。os.setgid(gid)设置当前进程组的id。在unix中有效,请查看相关文档。os.setgroups(groups)设置当前进程支持的groups id列表。groups必须是个列表,每个元素必须是个整数,这个操作只对超级用户有效,在unix中有效,请查看相关文档。os.setpgrp()调用system的setpgrp()或setpgrp(0, 0)() ,依赖于使用的是哪个版本的system。 请查看 Unix手册. 在unix中有效,请查看相关文档。 os.setpgid(pid, pgrp) 调用system的setpgid()设置pid进程group的id为pgrp.请查看 Unix手册. 在unix中有效,请查看相关文档。os.setreuid(ruid, euid)设置当前process当前 和有效的用户id。 在unix中有效,请查看相关文档。os.setregid(rgid, egid)设置当前process当前 和有效的组id。在unix中有效,请查看相关文档。os.getsid(pid)调用system的getsid()。 请查看 Unix手册. 在unix中有效,请查看相关文档。os.setsid()调用system的setsid()。请查看 Unix手册. 在unix中有效,请查看相关文档。os.setuid(uid)设置当前user id。在unix中有效,请查看相关文档。程序返回状态os.strerror(code)返回程序中错误code的错误信息。在某些平台上,当给一个未知的code,strerror()返回NULL,将抛出ValueError。在unix,Windows中有效。文件相关操作os.umask(mask)设置当前权限掩码,同时返回先前的权限掩码。在unix,Windows中有效。os.fdopen(fd[, mode[, bufsize]])返回一个文件描述符号为fd的打开的文件对象。mode和bufsize参数,和内建的open()函数是同一个意思。在unix,Windows中有效。 mode必须以’r’, ‘w’,或者’a’开头, 否则抛出ValueError。以’a’开头的mode, 文件描述符中O_APPEND位已设置。os.popen(command[, mode[, bufsize]])给或从一个command打开一个管理。返回一个打开的连接到管道文件对象,文件对象可以读或写,在于模式是’r’(默认) 或’w’,bufsize参数,和内建的open()函数是同一个意思。 command返回的状态 (在wait()函数中编码) 和调用文件对象的close()返回值一样, 除非返回值是0(无错误终止), 返回None 。 在unix,Windows中有效。在 2.6版本中已抛弃。使用subprocess模块。os.tmpfile()返回一个打开的模式为(w+b)的文件对象 .这文件对象没有文件夹入口,没有文件描述符,将会自动删除。在unix,Windows中有效。文件描述符操作os.close(fd)关闭文件描述符fd. 在unix,Windows中有效。os.dup(fd)返回文件描述符fd的cope. 在unix,Windows中有效。os.dup2(fd, fd2)复制文件描述符fd到fd2, 如果有需要首先关闭fd2. 在unix,Windows中有效。os.fchmod(fd, mode)改变文件描述符为fd的文件 ‘mode’ 为mode.查看chmod()文档 中mode的值。在unix中有效,请查看相关文档。version 2.6中新增。os.fchown(fd, uid, gid)改变文件描述符为fd的文件的所有者和group的id为uid和gid。 如果不想它们中的一个, 就设置为-1。在unix中有效,请查看相关文档。version 2.6中新增。os.fdatasync(fd)强制将文件描述符为fd的文件写入硬盘。不强制更新metadata。在unix中有效,请查看相关文档。注:在MacOS中无效。os.fpathconf(fd, name)返回一个打开的文件的系统配置信息。name为检索的系统配置的值,它也许是一个定义系统值的字符串,这些名字在很多标准中指定(POSIX.1, Unix 95, Unix 98, 和其它)。一些平台也定义了一些额外的名字。这些名字在主操作系统上pathconf_names的字典中。对于不在pathconf_names中的配置变量,传递一个数字作为名字,也是可以接受的。 在unix中有效,请查看相关文档。如果name是一个字符串或者未知的,将抛出ValueError。如果name是一个特别的值,在系统上不支持,即使它包含在pathconf_names中,将会抛出错误数字为errno.EINVAL的OSError。os.fstat(fd)返回文件描述符fd的状态,像stat()。在unix,Windows中有效。 os.fstatvfs(fd) 返回包含文件描述符fd的文件的文件系统的信息,像 statvfs()。在unix中有效,请查看相关文档。os.fsync(fd)强制将文件描述符为fd的文件写入硬盘。在Unix, 将调用fsync()函数;在Windows, 调用 _commit()函数。如果你准备操作一个Python文件对象f, 首先f.flush(),然后os.fsync(f.fileno()), 确保与f相关的所有内存都写入了硬盘.在unix,Windows中有效。os.ftruncate(fd, length)裁剪文件描述符fd对应的文件, 所以它最大不能超过文件大小。在unix中有效,请查看相关文档。os.isatty(fd)如果文件描述符fd是打开的,同时与tty(-like)设备相连,则返回true, 否则False。 在unix中有效,请查看相关文档。os.lseek(fd, pos, how)设置文件描述符 fd当前位置为pos, how方式修改: SEEK_SET 或者 0 设置从文件开始的计算的pos; SEEK_CUR或者 1 则从当前位置计算; os.SEEK_END或者2则从文件尾部开始. 在unix,Windows中有效。os.write(fd, str)写入字符串到文件描述符 fd中. 返回实际写入的字符串长度. 在unix,Windows中有效。*注: *这函数是打算为低层 I/O服务的 ,同时必须应用在os.open()或者pipe()函数返回的文件描述符. 读取内建函数open()或者by popen()或者fdopen(),或者sys.stdin返回的一个“文件对象” , 使用它的read()或者readline()方法下面的常数是open()函数的 flags参数选项. 它们可以使用 bitwise合并或者operator |。它们中的一些常数并不是在所有平台都有效. 它们更多使用请查看相关资料。os.O_RDONLYos.O_WRONLYos.O_RDWRos.O_APPENDos.O_CREATos.O_EXCLos.O_TRUNC这些常数在Unix and Windows上有效。os.O_DSYNCos.O_RSYNCos.O_SYNCos.O_NDELAYos.O_NONBLOCKos.O_NOCTTYos.O_SHLOCKos.O_EXLOCK这些常数仅在Unix上有效.os.O_BINARYos.O_NOINHERITos.O_SHORT_LIVEDos.O_TEMPORARYos.O_RANDOMos.O_SEQUENTIALos.O_TEXT这些常数仅在 Windows上有效.os.O_ASYNCos.O_DIRECTos.O_DIRECTORYos.O_NOFOLLOWos.O_NOATIME这些常数是 GNU扩展,如果没有在C库声明刚没有.os.SEEK_SETos.SEEK_CURos.SEEK_ENDlseek()函数的参数。 它们的值分别是 0, 1,和 2。在Unix and Windows上有效。版本2.5新增。OS子模块:Path模块os.path.abspath(path) #返回绝对路径os.path.basename(path) #返回文件名os.path.commonprefix(list) #返回list(多个路径)中,所有path共有的最长的路径。os.path.dirname(path) #返回文件路径os.path.exists(path) #路径存在则返回True,路径损坏返回Falseos.path.lexists #路径存在则返回True,路径损坏也返回Trueos.path.expanduser(path) #把path中包含的”~“和”~user"转换成用户目录os.path.expandvars(path) #根据环境变量的值替换path中包含的”$name”和”${name}”os.path.getatime(path) #返回最后一次进入此path的时间。os.path.getmtime(path) #返回在此path下最后一次修改的时间。os.path.getctime(path) #返回path的大小os.path.getsize(path) #返回文件大小,如果文件不存在就返回错误os.path.isabs(path) #判断是否为绝对路径os.path.isfile(path) #判断路径是否为文件os.path.isdir(path) #判断路径是否为目录os.path.islink(path) #判断路径是否为链接os.path.ismount(path) #判断路径是否为挂载点()os.path.join(path1[, path2[, …]]) #把目录和文件名合成一个路径os.path.normcase(path) #转换path的大小写和斜杠os.path.normpath(path) #规范path字符串形式os.path.realpath(path) #返回path的真实路径os.path.relpath(path[, start]) #从start开始计算相对路径os.path.samefile(path1, path2) #判断目录或文件是否相同os.path.sameopenfile(fp1, fp2) #判断fp1和fp2是否指向同一文件os.path.samestat(stat1, stat2) #判断stat tuple stat1和stat2是否指向同一个文件os.path.split(path) #把路径分割成dirname和basename,返回一个元组os.path.splitdrive(path) #一般用在windows下,返回驱动器名和路径组成的元组os.path.splitext(path) #分割路径,返回路径名和文件扩展名的元组os.path.splitunc(path) #把路径分割为加载点与文件os.path.walk(path, visit, arg) #遍历path,进入每个目录都调用visit函数,visit函数必须有3个参数(arg, dirname, names),dirname表示当前目录的目录名,names代表当前目录下的所有文件名,args则为walk的第三个参数os.path.supports_unicode_filenames #设置是否支持unicode路径名后序本文内容整理自 AllenW 、DK 等的博客,仅用作工作和学习中的参考,版权归原作者所有。本文所列内容并不全面,更或者还存在错误和缺陷。在以后的工作和学习中,将继续更新和完善本文内容。