python os模块示例讲解

来源:互联网 发布:免费听书软件 编辑:程序博客网 时间:2024/06/05 03:43

os模块包含普遍的操作系统功能,提供了丰富的方法用来处理文件和目录以及一些系统相关的信息的获取。利用这个模块可以写出与平台无关的程序,比如就是使用os.sep可以取代操作系统特定的路径分割符。

本模块提供一种可移植的方式来使用依赖于操作系统的功能。如果你只想读写文件请参阅open(),如果你想操作文件路径请参阅os.path模块,如果你想读取命令行上所有文件的所有行请参阅fileinput模块。关于创建临时文件和目录请参阅tempfile模块,关于高级的文件和目录处理请参阅shutil模块。

这些函数可用性的注意事项:

Python内建操作系统相关模块的设计是这样的,只要功能相同它就使用相同的接口;例如,函数os.stat(path)以相同的格式(源之于POSIX接口)返回path 的stat信息。对某个操作系统特有的扩展也可以通过os模块访问,但是使用它们当然不利于移植。“可用的平台:Unix”的标注表示该函数通常只在Unix系统上能找到。它不是在声明它只存在于某个具体的操作系统上。如果没有单独地标注,所有声明“可用的平台:Unix”的函数都支持Mac OS X,因为它构建在Unix内核上。

注意:如果文件名和目录非法或不可访问,或者其它的参数类型正确但是操作系统不接受,本模块中的所有函数都将引发OSError。

下面实例讲解一些常用的方法:

0. 查看操作系统相关模块的名字。

目前已经注册的名字:’posix’、’nt’、’os2’、’ce’、’java’、’riscos’。

In [100]: os.nameOut[100]: 'posix'

注意:sys.platform具有更好的粒度。os.uname()给出依赖于系统的版本信息。

In [105]: import sysIn [106]: sys.platformOut[106]: 'linux2'In [104]: os.uname()Out[104]: ('Linux', 'foundation3.ilt.example.com', '3.10.0-327.el7.x86_64', '#1 SMP Thu Oct 29 17:29:29 EDT 2015', 'x86_64')

0.5 当前用户和环境相关(可用的平台:Unix。)

os.ctermid()

返回进程控制终端对应的文件名。

os.getegid()

返回当前进程有效的组ID。它对应于当前进程中正在执行的文件的“set id”。

os.geteuid()

返回当前进程有效的用户ID。

os.getgid()

返回当前进程真正的组ID。

os.getgroups()

返回与当前进程关联的附加组ID的列表。

os.getlogin()

返回进程控制终端的登录用户名称。对于大部分场景,使用环境变量LOGNAME找出用户是谁或者pwd.getpwuid(os.getuid())[0]来获得当前有效用户ID的登录名更加实用。

os.getpgid(pid)

返回进程ID为pid 的进程组ID。如果pid为0,返回当前进程的进程组ID。

os.getpgrp()

返回当前进程组的ID。

os.getpid()

返回当前进程的ID。可用的平台:Unix、Windows。

os.getppid()

返回父进程的ID。

1. 校验权限模式(os.access(path,mode)),比如对于一个权限为644的文件,我们进行以下操作:

In [38]: os.access('eduSystem.py',1)Out[38]: FalseIn [39]: os.access('eduSystem.py',4)Out[39]: TrueIn [40]: os.access('eduSystem.py',6)Out[40]: True

2.改变当前工作目录(os.chdir(path))和获取当前路径(os.getcwd())

In [44]: os.getcwd()Out[42]: u'/root/PycharmProjects/lockey'In [43]: os.chdir('/root/PycharmProjects/')In [44]: os.getcwd()Out[44]: '/root/PycharmProjects'

3.更改权限(os.chmod(path,mode)):

In [49]: os.chmod('lockey/eduSystem.py',777)In [50]: os.access('lockey/eduSystem.py',7)Out[50]: True

4.更改文件所有者:

In [62]: ls -ltotal 8-rw-r--r-- 1 root root 286 Sep  7 09:22 halo.py-rw-r--r-- 1 root root 124 Sep  7 08:54 __init__.pyIn [63]: os.chown('halo.py',1001,1001)#用户lockey的id信息(uid=1001(lockey) gid=1001(lockey) groups=1001(lockey))In [64]: ls -ltotal 8-rw-r--r-- 1 lockey lockey 286 Sep  7 09:22 halo.py-rw-r--r-- 1 root   root   124 Sep  7 08:54 __init__.py

5. 与文件描述符相关操作:

文件描述符是操作系统为每个进程维护的一个结构体数组的索引(下标)。因此fd一定是非负整数。
内核会为进程打开的每个文件分配一个结构体来存放文件的相关信息,这个结构体在结构体数组中的下标即为该文件的文件描述符。

os.close(fd):关闭文件描述符 fdos.closerange(fd_low, fd_high):关闭所有文件描述符,从 fd_low (包含) 到 fd_high (不包含), 错误会忽略os.dup(fd):复制文件描述符 fdos.dup2(fd, fd2):将一个文件描述符 fd 复制到另一个 fd2os.fchdir(fd):通过文件描述符改变当前工作目录os.fchmod(fd, mode):改变一个文件的访问权限,该文件由参数fd指定,参数mode是Unix下的文件访问权限。os.fchown(fd, uid, gid):修改一个文件的所有权,这个函数修改一个文件的用户ID和用户组ID,该文件由文件描述符fd指定。 os.fdatasync(fd):强制将文件写入磁盘,该文件由文件描述符fd指定,但是不强制更新文件的状态信息。os.fstat(fd):返回文件描述符fd的状态,像stat()。 os.fstatvfs(fd):返回包含文件描述符fd的文件的文件系统的信息,像 statvfs()os.fsync(fd):强制将文件描述符为fd的文件写入硬盘。os.ftruncate(fd, length):裁剪文件描述符fd对应的文件, 所以它最大不能超过文件大小。

6.创建硬连接(os.link(src, dst)名为参数 dst,指向参数 src):

关于软硬连接的知识可以参考 Linux 命令之软硬连接的创建-ln

In [9]: os.link('halo.py','/halo.py')In [10]: ls -l /halo.py-rw-r--r-- 2 root root 286 Sep  7 09:22 /halo.py

os.symlink(src, dst)创建一个软链接

7. 返回path指定的文件夹包含的文件或文件夹的名字的列表(os.listdir(path))

In [12]: os.listdir('.')Out[12]: ['__init__.py', 'halo.py']

8. 获取文件状态(os.lstat(path) 像stat(),但是没有软链接 )

In [13]: os.lstat('halo.py')Out[13]: posix.stat_result(st_mode=33188, st_ino=538555447, st_dev=2051L, st_nlink=2, st_uid=0, st_gid=0, st_size=286, st_atime=1504750879, st_mtime=1504747343, st_ctime=1504751939)

9. 递归文件夹创建函数(os.makedirs(path[, mode]))

像mkdir(), 但创建的所有intermediate-level文件夹需要包含子文件夹。
注意是makedirs不是mkdirs

In [21]: os.makedirs('./testdir/halo/halo')In [22]: ls -l testdir/halo/halo/total 0

10.以数字mode的mode创建一个名为path的文件夹.默认的 mode 是 0777 (八进制)。(os.mkdir(path[, mode]))

In [16]: os.mkdir('./testdir')In [17]: lshalo.py  __init__.py  testdir/

11.os.mknod(filename[, mode=0600, device])

创建一个名为filename文件系统节点(文件,设备特别文件或者命名pipe)。

12.返回软链接所指向的文件 (os.readlink(path))

In [47]: os.readlink('/root/halo.py')Out[47]: 'halo.py'

13.(os.remove(path))删除路径为path的文件。如果path 是一个文件夹,将抛出OSError; 查看下面的rmdir()删除一个 directory。

In [52]: os.remove('/root/halo.py')In [53]: os.readlink('/root/halo.py')---------------------------------------------------------------------------OSError                                   Traceback (most recent call last)<ipython-input-53-3c1960b394f9> in <module>()----> 1 os.readlink('/root/halo.py')OSError: [Errno 2] No such file or directory: '/root/halo.py'

14. (os.removedirs(path))递归删除目录。

15. (os.rename(src, dst))重命名文件或目录,从 src 到 dst

In [57]: os.rename('halo','hi')In [58]: lseduSystem.py*  hi  py0907/

16.(os.rmdir(path))删除path指定的空目录,如果目录非空,则抛出一个OSError异常。

17.(os.stat(path))获取path指定的路径的信息,功能等同于C API中的stat()系统调用。

In [76]: os.stat('halo.py')#os.lstat('halo.py')Out[76]: posix.stat_result(st_mode=33188, st_ino=538555447, st_dev=2051L, st_nlink=2, st_uid=0, st_gid=0, st_size=286, st_atime=1504750879, st_mtime=1504747343, st_ctime=1504751939)

18.(os.write(fd, str))写入字符串到文件描述符 fd中. 返回实际写入的字符串长度

In [67]: os.read(4,100)Out[67]: ''In [68]: os.write(4,'lockey')Out[68]: 6In [69]: os.read(4,100)Out[69]: 'lockey'

19.(os.read(fd, n))从文件描述符 fd 中读取最多 n 个字节,返回包含读取字节的字符串,文件描述符 fd对应文件已达到结尾, 返回一个空字符串。

In [62]: os.read(3,100)Out[62]: '\r\x00\x00\x00\x0c\x00+\x00\x03\xe7\x03\xc8\x03|\x03C\x03\x1f\x02\xfb\x02\xc8\x01\xfa\x01\xd6\x01\x08\x00Z\x00+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00-)\x05\x01\x0133\x06\x04cur = conn.cursor()cur = conn.cursor()\x81+(\x07\x01\x01\x81/\x81/'

20. ( os.urandom(n))返回一个n字节的字符串用来加密
Return a string of n random bytes suitable for cryptographic use.

In [119]: os.urandom(3)Out[119]: 'A^\xea'

更多更详细的内容可以查看os — 操作系统的各种接口

原创粉丝点击