设为首页 收藏本站
查看: 631|回复: 0

[经验分享] Python 学习笔记 (7)—— OS模块

[复制链接]

尚未签到

发表于 2018-8-4 11:24:07 | 显示全部楼层 |阅读模式
  os 模块,正如其名,主要与操作系统打交道的,下面介绍下一些常见的功能
  一、文件与目录操作
  1、os.getcwd()    获取当前路径
  >>> import os
  >>> os.getcwd()
  '/tmp/python'
  2、os.listdir()    列出目录中的内容
  >>> import os
  >>> os.listdir(os.getcwd())
  ['esc.py', '7.py', 'cat1.py', 'say.pyc', '2.py', 'backup_ver1.py', '5.py', '8.py', 'count.py', '3.py', 'replace.py', 'image']
  注意,通过这个方法只能以列表的形式列出所有文件,但不能遍历该目录下的子目录
  
  3、os.mkdir()    创建目录
  >>> import os
  >>> os.mkdir('/tmp/testdir')
  [root@node1 python]# ls /tmp/testdir/ -d
  /tmp/testdir/
  通过os.mkdir 只能创建一级目录,如果父目录不存在,则会报错:
  >>> import os
  >>> os.mkdir('/testdir/dirs')
  Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  OSError: [Errno 2] No such file or directory: '/testdir/dirs'
  一次性创建嵌套目录可使用os.makedirs,makedirs可以生成多层递归目录,removedirs可以删除多层递归的空目录,若目录中有文件则无法删除
  >>> import os
  >>> os.makedirs('/testdir/dirs')
  >>> os.system('ls -ld /testdir/dirs')
  drwxr-xr-x. 2 root root 4096 Dec  3 20:52 /testdir/dirs
  0
  4、os.rmdir()    删除目
  >>> import os
  >>> os.rmdir('/testdir/dirs')
  >>> os.system('ls -l /testdir/dirs')
  ls: cannot access /testdir/dirs: No such file or directory
  512
  目录必须为空,否则会报错
  [root@node1 tmp]# mkdir testdir
  [root@node1 tmp]# touch testdir/a
  >>> import os
  >>> os.rmdir('/tmp/testdir')
  Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  OSError: [Errno 39] Directory not empty: '/tmp/testdir'
  如果要删除可以借助os.system() 执行shell命令强行删除
  >>> import os
  >>> os.system('rm -rf /tmp/testdir')
  0
  >>> os.system('ls -l /tmp/testdir')
  ls: cannot access /tmp/testdir: No such file or directory
  512
  5、os.chdir()    改变目录
  >>> import os
  >>> os.getcwd()
  '/tmp/python'
  >>> os.chdir('/etc')
  >>> os.getcwd()
  '/etc'
  6、os.remove()    删除文件
  >>> import os
  >>> os.remove('/tmp/python/1.py')
  7、os.rename(原文件名,改变文件名)    重命名文件或目录
  >>> import os
  >>> os.rename('/tmp/test.txt','/tmp/python.txt')
  >>> os.system('ls -l /tmp/*.txt')
  -rw-r--r--. 1 root root 47 Dec  2 06:16 /tmp/myhello.txt
  -rw-r--r--. 1 root root 82 Dec  2 06:18 /tmp/python.txt
  0
  os.renames()    递归的给目录重命名
  >>> import os
  >>> os.rename('/tmp/test/subdir','/tmp/test1/subdir1')
  Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  OSError: [Errno 2] No such file or directory
  >>> os.renames('/tmp/test/subdir','/tmp/test1/subdir1')
  >>> os.system('ls -ld /tmp/test1/subdir1')
  drwxr-xr-x. 2 root root 4096 Dec  4 20:06 /tmp/test1/subdir1
  0
  8、os.system()    执行shell 命令
  >>> import os
  >>> os.system('ls /tmp')
  backup  myhello.txt  python  python.txt  test  yum.log
  0
  9、os 模块属性
  >>> os.curdir    #当前工作目录的字符串名称
  '.'
  >>> os.pardir    #(当前工作目录的)父目录字符串名称
  '..'
  >>> os.linesep    #用于在文件中分隔行的字符串
  '\n'
  >>> os.sep    #用来分隔文件路径名的字符串
  '/'
  >>> os.pathsep    #用于分隔文件路径的字符串
  ':'
  这个属性在写脚本的时候比较有用,比如在写备份脚本的时候,指定存放备份的路径可以这样:
  >>> import time
  >>> filename = time.strftime('%H%M%S')
  >>> target_dir = '/tmp/backup'
  >>> dirname = target_dir + time.strftime('%Y%m%d')
  >>> target = dirname + os.sep + filename + '.tar.gz'
  10、os.stat()    返回文件的属性
  >>> import os
  >>> os.stat('/tmp/python.txt')
  posix.stat_result(st_mode=33188, st_ino=924858, st_dev=64768L, st_nlink=1, st_uid=0, st_gid=0,
  st_size=82, st_atime=1385936299, st_mtime=1385936293, st_ctime=1386076480)
  可以通过字典遍历
  #!/usr/bin/python
  import os
  import stat
  import time
  fileStats = os.stat('/tmp/python.txt')
  fileInfo = {
  'Size':fileStats[stat.ST_SIZE],
  'LastModified':time.ctime(fileStats[stat.ST_MTIME]),
  'LastAccessed':time.ctime(fileStats[stat.ST_ATIME]),
  'CreationTime':time.ctime(fileStats[stat.ST_CTIME]),
  'Mode':fileStats[stat.ST_MODE]
  }
  for infoField,infoValue in fileInfo.iteritems():
  print infoField, ':' ,infoValue
  [root@node1 python]# python stat.py
  LastModified : Mon Dec  2 06:18:13 2013
  Mode : 33188
  CreationTime : Tue Dec  3 21:14:40 2013
  LastAccessed : Mon Dec  2 06:18:19 2013
  Size : 82
  11、os.walk()   遍历目录
  函数声明:walk(top,topdown=True,onerror=None)
  1>参数top表示需要遍历的目录树的路径
  2>参数topdown的默认值是"True",表示首先返回目录树下的文件,然后在遍历目录树的子目录.Topdown的值为"False"时,则表示先遍历目录树的子目录,返回子目录下的文件,最后返回根目录下的文件
  3>参数onerror的默认值是"None",表示忽略文件遍历时产生的错误.如果不为空,则提供一个自定义函数提示错误信息后继续遍历或抛出异常中止遍历
  4>该函数返回一个元组,该元组有3个元素,这3个元素分别表示每次遍历的路径名,目录列表和文件列表
  #!/usr/bin/python
  import os
  def visitDir(path):
  for root,dirs,files in os.walk(path):
  for filespath in files:
  print os.path.join(root,filespath)
  if __name__ == "__main__":
  path = "/root"
  visitDir(path)
  [root@node1 python]# python walk.py
  /root/.bash_history
  /root/install.log.syslog
  /root/.bash_profile
  /root/.viminfo
  /root/anaconda-ks.cfg
  /root/.bash_logout
  /root/init.sh
  /root/.cshrc
  /root/.bashrc
  /root/.tcshrc
  /root/.lesshst
  /root/install.log
  /root/webproject/manage.py
  /root/webproject/webproject/wsgi.pyc
  /root/webproject/webproject/wsgi.py
  /root/webproject/webproject/settings.pyc
  /root/webproject/webproject/settings.py
  12、获取系统信息
  >>> import os
  >>> os.uname()    #获取当前系统信息
  ('Linux', 'node1', '2.6.32-279.el6.x86_64', '#1 SMP Wed Jun 13 18:24:36 EDT 2012', 'x86_64')
  >>> os.getuid()   #获取当前用户ID
  0
  >>> os.getgid()   #获取当前组ID
  0
  >>> os.getpid()   #获取当前进程ID
  1239
  >>> os.getpgrp()   #获取当前进程组ID
  1239
  >>> os.ctermid()   #获取当前使用终端
  '/dev/tty'
  >>> os.getlogin()   #获取当前登录的用户名
  'root'
  二、权限
  13、os.access(路径,uid/gid)    测试指定uid/gid 对指定目录有没有权限,有权限返回True,无权限返回False
  >>> import os
  >>> os.access('/tmp/test')
  >>> os.access('/tmp/test',0)
  True
  >>> os.access('/tmp/test',33)
  False
  14、os.chmod(路径,权限)    修改文件/目录 权限
  >>> import os
  >>> os.chmod ('/tmp/python.txt',0775)
  >>> os.system('ls -l /tmp/python.txt')
  -rwxrwxr-x. 1 root root 82 Dec  2 06:18 /tmp/python.txt
  0
  15、os.chown(路径,UID,GID)    修改拥有者,属组
  >>> import os
  >>> os.chown('/tmp/python.txt',500,500)
  >>> os.system('ls -l /tmp/python.txt')
  -rwxrwxr-x. 1 python python 82 Dec  2 06:18 /tmp/python.txt
  0
  三、os.path 模块
  16、os.path.basename()    去掉目录路径, 返回文件名
  >>> import os.path
  >>> os.path.basename('/tmp/python.txt')
  'python.txt'
  17、os.path.dirname()    去掉文件名, 返回目录路径
  >>> import os.path
  >>> os.path.dirname('/tmp/python.txt')
  '/tmp'
  18、os.path.join()   将分离的各部分组合成一个路径名
  >>> import os.path
  >>> dir = '/tmp'
  >>> file = 'python.txt'
  >>> os.path.join(dir,file)
  '/tmp/python.txt'
  19、
  os.path.getatime()     返回最近访问时间
  os.path.getctime()     返回文件创建时间
  os.path.getmtime()    返回最近文件修改时间
  >>> import os.path
  >>> os.path.getatime('/tmp/python.txt')
  1385936299.3662264
  >>> os.path.getctime('/tmp/python.txt')
  1386107618.3203411
  >>> os.path.getmtime('/tmp/python.txt')
  1385936293.4863505
  但这样看到的时间,是计算当前时间距离1970年1月1日的秒数的,不人性化,可以这样显示
  >>> import os.path
  >>> import time
  >>> time.ctime(os.path.getatime('/tmp/python.txt'))
  'Mon Dec  2 06:18:19 2013'
  >>> time.ctime(os.path.getctime('/tmp/python.txt'))
  'Wed Dec  4 05:53:38 2013'
  >>> time.ctime(os.path.getmtime('/tmp/python.txt'))
  'Mon Dec  2 06:18:13 2013'
  20、os.path.getsize()   返回文件大小(以字节为单位)
  >>> import os.path
  >>> os.path.getsize('/tmp/python.txt')
  82
  21、os.path.exists()    指定路径(文件或目录)是否存在
  >>> import os.path
  >>> os.path.exists('/tmp/python.txt')
  True
  >>> os.path.exists('/tmp/python')
  False
  22、
  os.path.isdir()     指定路径是否存在且为一个目录
  os.path.isfile()    指定路径是否存在且为一个文件
  >>> import os.path
  >>> os.path.isdir('/tmp/python.txt')
  False
  >>> os.path.isdir('/tmp/')
  True
  >>> os.path.isfile('/tmp')
  False
  >>> os.path.isfile('/tmp/python.txt')
  True
  os.path.exists()    判断指定路径是否存在
  >>> import os.path
  >>> os.path.exists('/tmp/')
  True
  >>> os.path.exists('/tmpp/')
  False
  23、os.path.splitext()   分隔文件名和后缀名
  >>> import os.path
  >>> os.path.splitext('python.txt')
  ('python', '.txt')
  ========================
  其他 os 模块函数
  文件处理
  mkfifo()/mknod()    创建命名管道/创建文件系统节点
  remove()/unlink()    删除文件 os.remove()函数用来删除一个文件。
  symlink()                  创建符号链接
  utime()                     更新时间戳
  tmpfile()                   创建并打开('w+b')一个新的临时文件
  目录/文件夹
  chroot()                     改变当前进程的根目录
  getcwdu()                 返回当前工作目录并返回一个 Unicode 对象 os.getcwd()函数得到当前工作目录,即当前Python脚本工作的目录路径。
  makedirs()                 创建目录/创建多层目录
  removedirs()             删除多层目录
  文件描述符操作
  open()                      底层的操作系统 open (对于文件, 使用标准的内建 open() 函数)
  read()/write()           根据文件描述符读取/写入数据
  dup()/dup2()           复制文件描述符号/功能相同, 但是是复制到另一个文件描述符
  设备号
  makedev()               从 major 和 minor 设备号创建一个原始设备号
  major()/minor()      从原始设备号获得 major/minor 设备号
  系统操作
  os.name                        字符串指示你正在使用的平台。比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'。
  os.getenv()                    获取一个环境变量,如果没有返回none
  os.putenv(key, value)   设置一个环境变量值
  分隔符
  os.sep()                        文件夹分隔符,windows中是 /
  os.extsep()                  扩展名分隔符,windows中是 .
  os.pathsep()               目录分隔符,windows中是 ;
  os.linesep()                 换行分隔符,windows中是 /r/n

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-546413-1-1.html 上篇帖子: python入门(四)python对文件的操作 下篇帖子: Eclipse+python开发环境配置
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表