Python os模块

Linux12阅读模式
  1. os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径
  1. os.chdir("dirname") 改变当前脚本工作目录;相当于shellcd
  1. os.curdir 返回当前目录: ('.')
  1. os.pardir 获取当前目录的父目录字符串名:('..')
  1. os.makedirs('dirname1/dirname2') 可生成多层递归目录
  1. os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
  1. os.mkdir('dirname') 生成单级目录;相当于shellmkdir dirname
  1. os.rmdir('dirname') 删除单级空目录,若目录不为空则无法删除,报错;相当于shellrmdir dirname
  1. os.listdir('dirname') 列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
  1. os.remove() 删除一个文件
  1. os.rename("oldname","newname") 重命名文件/目录
  1. os.stat('path/filename') 获取文件/目录信息
  1. os.symlink('path/filename','ln_filename') 创建符号链接,源需绝对路径
  1. os.utime() 修改时间属性
  2. >>> import os
  3. >>> stinfo = os.stat('c.py')
  4. >>> print "access time of c.py: %s \nmodified time of c.py: %s" % (stinfo.st_atime,stinfo.st_mtime)
  5. access time of c.py: 1375448908.0
  6. modified time of c.py: 1369735909.0
  7. >>> os.utime('c.py',(1375448978,1369735977))
  8. >>> print "access time of c.py: %s \nmodified time of c.py: %s" % (stinfo.st_atime,stinfo.st_mtime)
  9. access time of c.py: 1375448908.0
  10. modified time of c.py: 1369735909.0
  11. 退出Python交互模式,再次进入
  12. >>> import os
  13. >>> stinfo = os.stat('c.py')
  14. >>> print "access time of c.py: %s \nmodified time of c.py: %s" % (stinfo.st_atime,stinfo.st_mtime)
  15. access time of c.py: 1375448978.0
  16. modified time of c.py: 1369735977.0
  1. os.walk() 生成一个目录树下的所有文件名

os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]])

  • top表示需要遍历的目录树的路径
  • topdown的默认值是"True",表示首先返回目录树下的文件,然后在遍历目录树的子目录.Topdown的值为"False"时,则表示先遍历目录树的子目录,返回子目录下的文件,最后返回根目录下的文件
  • onerror的默认值是"None",表示忽略文件遍历时产生的错误.如果不为空,则提供一个自定义函数提示错误信息后继续遍历或抛出异常中止遍历

该函数返回一个元组,该元组有3个元素,这3个元素分别表示每次遍历的路径名,目录列表和文件列表
os.walk()举例:

  1. >>> import os
  2. >>> for root, dirs, files in os.walk("wd/chat", topdown=False):
  3. ... for name in files:
  4. ... print(os.path.join(root, name)) #打印文件绝对路径
  5. ... for name in dirs:
  6. ... print(os.path.join(root, name)) #打印目录绝对路径
  7. ...
  1. os.tmpfile() 创建并打开‘w+b’一个新的临时文件
  1. os.sep 输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
  1. os.linesep 输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
  1. os.pathsep 输出用于分割文件路径的字符串
  1. os.name 输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
  1. os.system("bash command") 运行shell命令,直接显示
  1. os.popen("bash command") 运行shell命令,生成对象,可赋给变量,再用read读取
  2. >>> import os
  3. >>> os.system('ls twisted')
  4. chat_client_twisted.py chat_server_twisted.py
  5. 0
  6.  
  7. >>> LS = os.popen('ls twisted')
  8. >>> LS.readlines()
  9. ['chat_client_twisted.py\n', 'chat_server_twisted.py\n']
  1. os.environ 获取系统环境变量
  1. os.access('pathfile',os.W_OK) 检验文件权限模式,输出TrueFalse
  1. os.chmod('pathfile',os.W_OK) 改变文件权限模式
  1. # echo 'test' > test.sh
  2. >>> os.access('test.sh',os.W_OK)
  3. True
  4. >>> os.access('test.sh',os.X_OK)
  5. False
  6. >>> os.chmod('test.sh',os.X_OK)
  7. >>> os.access('test.sh',os.X_OK)
  8. True
  9. # ls -l test.sh
  10. ---------x 1 root root 12 Oct 20 23:03 test.sh

os.path常用模块详解

  1. os.path.abspath(path) 返回path规范化的绝对路径
  2. >>> import os.path
  3. >>> os.path.abspath('c.py')
  4. '/root/py/c.py'
  5. >>> os.path.abspath('../py/c.py')
  6. '/root/py/c.py'
  1. os.path.split(path) path分割成目录和文件名二元组返回
  2. >>> os.path.split('/root/py/c.py')
  3. ('/root/py', 'c.py')
  4. >>> os.path.split('/root/py/')
  5. ('/root/py', '')
  1. os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素
  2. >>> os.path.dirname('/root/py/c.py')
  3. '/root/py'
  4. >>> os.path.dirname('c.py')
  5. ''
  1. os.path.basename(path) 返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
  2. >>> os.path.basename('/root/py/c.py')
  3. 'c.py'
  4. >>> os.path.basename('/root/py')
  5. 'py'
  1. os.path.commonprefix(list) 返回list中,所有path共有的最长的路径,从左向右,相同字符
  1. os.path.exists(path) 如果path存在,返回True;如果path不存在,返回False
  1. os.path.isabs(path) 如果path是绝对路径,返回True
  1. os.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回False
  1. os.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False
  1. os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
  1. os.path.normcase(path) Linux下,该函数会原样返回path,在windows平台上会将路径中所有字符转换为小写,并将所有斜杠转换为反斜杠
  2. >>> os.path.normcase('c:/windows\\system32\\')
  3. 'c:\\windows\\system32\\'
  1. os.path.normpath(path) 规范化路径
  2. >>> os.path.normpath('c://windows\\System32\\../Temp/')
  3. 'c:\\windows\\Temp'
  1. os.path.splitdrive(path) 拆分驱动器名和路径,主要对win,对linux元组第一个总是空的
  2. >>> os.path.splitdrive('c:\\windows')
  3. ('c:', '\\windows')
  1. os.path.splitext(path) 分离文件名与扩展名;默认返回(fname,fextension)元组,可做分片操作 ,以“.”为分隔符
  2. >>> os.path.splitext('/root/py/c.py')
  3. ('/root/py/c', '.py')
  1. os.path.getsize(path) 返回path的大小(字节)
  1. os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间
  1. os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间

os.path.walk(top,func,arg)

  • top表示需要遍历的目录树的路径
  • func表示回调函数,对遍历路径进行处理.所谓回调函数,是作为某个函数的参数使用,当某个时间触发时,程序将调用定义好的回调函数处理某个任务.回调函数必须提供3个参数:第1个参数为walk()的参数tag,第2个参数表示目录列表,第3个参数表示文件列表
  • arg是传递给回调参数func的元组.回调函数的一个参数必须是arg,为回调函数提供处理参数.参数arg可以为空
  1. >>> import os
  2. >>> def VisitDir(arg,dirname,names):
  3. ... for filespath in names:
  4. ... print os.path.join(dirname,filespath)
  5. ...
  6. >>> path='/root/py/wd/chat'
  7. >>> os.path.walk(path,VisitDir,())
  8. /root/py/wd/chat/chat_server.py
  9. /root/py/wd/chat/chat_client.py
  10. /root/py/wd/chat/test
  11. /root/py/wd/chat/test/linuxeye
  12. /root/py/wd/chat/test/test2
  13. /root/py/wd/chat/test/test3
  14. /root/py/wd/chat/test/test2/asdf
  15. /root/py/wd/chat/test/test3/sdfaxx

os.path.walk()与os.walk()产生的文件名列表并不相同。os.path.walk()产生目录树下的目录路径和文件路径,而os.walk()只产生文件路径

Mon Oct 21 16:00:05 CST 2013

 
  • 本文由 yeho 发表于 2013-10-21
  • 转载请务必保留本文链接:https://linuxeye.com/373.html
脚本

Python脚本批量检查SSL证书过期时间

背景 云平台https的域名服务器如果超过上百条,如果都分布在不同的服务器或者负载均衡上,如果即将过期, 做完替换SSL证书动作后,如何批量检查域名的SSL证书是否替换网站,可通过如下脚本实现。 Py...
脚本

腾讯云COS上传、批量删除工具(Python)

腾讯云对象存储COS是类似于阿里云OSS,相比OSS,COS提供每月免费额度:存储空间50G、外网访问流量10G(内网免费)、免费读请求100万次、写请求10万次。对网站备份来说不错,但是,腾讯云提供...
Python多线程抓取代理服务器 Linux

Python多线程抓取代理服务器

Python作为一门功能强大的脚本语言来说,经常被用来写爬虫程序,下面是Python爬虫多线程抓取代理服务器。 年前是用 //linuxeye.com/340.html 来抓取代理服务器的,谁知道过完...