一.概述

开发运维相关支撑系统现今已成为Devops下的一大热门领域,Python在这方面也有着自己独到的优势。这类场景以及其他一些场景下,需要调用一些操作系统的接口,这就涉及到今天要讲述的OS模块和sys模块。

二.OS模块的常见用法

  • os.getcwd()
    获取当前工作目录。需要注意的是目录的分隔符,windows下是’\\’(有一个转义符),linux下是‘/’
      1 >>> import os
    2 >>> os.getcwd()
    3 'C:\\Users\\Beyondi'
  • os.chdir(‘dirname’)
    改变当前工作目录
      1 >>> import os
    2 >>> os.getcwd()
    3 'C:\\Users\\Beyondi'
    4 >>> os.chdir('d:\\python')
    5 >>> os.getcwd()
    6 'd:\\python'
  • os.curdir
    返回当前目录点号
      1 >>> import os
    2 >>> os.curdir
    3 '.'
  • os.pardir
    返回当前目录的父目录字符串’..’
      1 >>> import os
    2 >>> os.pardir
    3 '..'
  • os.makedirs('dirname1/dirname2')
    生成单层或多层递归目录
      1 >>> import os
    2 >>> os.listdir('D:\\iTudou')
    3 ['下载', '转码']
    4 >>> os.makedirs('D:\\iTudou\\test\\001')
    5 >>> os.listdir('D:\\iTudou')
    6 ['test', '下载', '转码']
    7 >>> os.listdir('D:\\iTudou\\test')
    8 ['001']

    注意这里有一个前提是具有相应的权限去创建目录,否则会提示拒绝访问之类的错误。

  • os.removedirs(”dirname”)
    往上层递归删除空目录,若dirname目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
      1 >>> import os
    2 >>> os.listdir('d:\\iTudou')
    3 ['test', 'test2', '下载', '转码']
    4 >>> os.listdir('d:\\iTudou\\test')
    5 ['001']
    6 >>> os.listdir('d:\\iTudou\\test\\001')
    7 []
    8 >>> os.removedirs('d:\\iTudou\\test\\001')
    9 >>> os.listdir('d:\\iTudou\\test\\001')
    10 Traceback (most recent call last):
    11 File "<stdin>", line 1, in <module>
    12 FileNotFoundError: [WinError 3] 系统找不到指定的路径。: 'd:\\iTudou\\test\\001'
    13 >>> os.listdir('d:\\iTudou\\test')
    14 Traceback (most recent call last):
    15 File "<stdin>", line 1, in <module>
    16 FileNotFoundError: [WinError 3] 系统找不到指定的路径。: 'd:\\iTudou\\test'
    17 >>> os.listdir('d:\\iTudou')
    18 ['test2', '下载', '转码']
    19 >>> os.removedirs('d:\\iTudou\\test2')
    20 >>> os.listdir('d:\\iTudou')
    21 ['下载', '转码']
    22 >>>

    慎用该命令,虽然删除的是空目录,但是会向上递归,功能太过强大,且有些反人类设计了!
    如果要递归删除非空目录,还是用shutil.rmtree(path)这个神器把,更符合rm -rf的思路。

  • os.mkdir
    生成单级目录,相当于linux中的mkdir
      1 >>> import os
    2 >>> os.listdir('d:\\iTudou')
    3 ['下载', '转码']
    4 #最后一层目录的父目录必须已经存在,否则要一级一级去创建
    5 >>> os.mkdir('d:\\iTudou\\test\\001')
    6 Traceback (most recent call last):
    7 File "<stdin>", line 1, in <module>
    8 FileNotFoundError: [WinError 3] 系统找不到指定的路径。: 'd:\\iTudou\\test\\001'
    9 >>> os.mkdir('d:\\iTudou\\test')
    10 >>> os.listdir('d:\\iTudou')
    11 ['test', '下载', '转码']
  • os.rmdir
    删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
      1 >>> import os
    2 >>> os.listdir('d:\\iTudou\\test')
    3 []
    4 >>> os.makedirs('d:\\iTudou\\test2\\001')
    5 >>> os.listdir('d:\\iTudou\\test2')
    6 ['001']
    7 >>> os.rmdir('d:\\iTudou\\test')
    8 >>> os.rmdir('d:\\iTudou\\test2')
    9 Traceback (most recent call last):
    10 File "<stdin>", line 1, in <module>
    11 OSError: [WinError 145] 目录不是空的。: 'd:\\iTudou\\test2'
  • os.listdir('dirname')   
    列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
      1 >>> import os
    2 >>> os.listdir('c:\\users')
    3 ['All Users', 'Beyondi', 'Default', 'Default User', 'desktop.ini', 'Public']
  • os.remove()
    删除一个文件
      1 >>> import os
    2 >>> os.listdir('D:\\iTudou\\test2')
    3 ['1.txt']
    4 >>> os.remove('D:\\iTudou\\test2\\1.txt')
    5 >>> os.listdir('D:\\iTudou\\test2')
    6 []
  • os.rename(‘oldname’,’newname’)
    重命名一个文件或目录
      1 >>> import os
    2 >>> os.listdir('D:\\iTudou\\test2')
    3 ['1.txt']
    4 >>> os.remove('D:\\iTudou\\test2\\1.txt')
    5 >>> os.listdir('D:\\iTudou\\test2')
    6 []
    7 >>> import os
    8 >>> os.listdir('D:\\iTudou\\test2')
    9 ['002.txt']
    10 >>> os.rename('D:\\iTudou\\test2\\002.txt','D:\\iTudou\\test2\\001.txt')
    11 >>> os.listdir('D:\\iTudou\\test2')
    12 ['001.txt']
    13 >>> os.rename('D:\\iTudou\\test2','D:\\iTudou\\test1')
    14 >>> os.listdir('D:\\iTudou')
    15 ['test1', '下载', '转码']
    16 >>>
  • os.stat('path/filename') 
    获取文件/目录信息
      1 >>> import os
    2 >>> os.stat('D:\\iTudou\\test1')
    3 os.stat_result(st_mode=16895, st_ino=12384898975275303, st_dev=1716593648, st_nl
    4 ink=1, st_uid=0, st_gid=0, st_size=0, st_atime=1519773509, st_mtime=1519773509,
    5 st_ctime=1519769974)
    6 >>> os.stat('D:\\iTudou\\test1\\001.txt')
    7 os.stat_result(st_mode=33206, st_ino=2251799813691689, st_dev=1716593648, st_nli
    8 nk=1, st_uid=0, st_gid=0, st_size=0, st_atime=1519773430, st_mtime=1519773430, s
    9 t_ctime=1519773430)
    10 >>> os.stat('D:\\iTudou')
    11 os.stat_result(st_mode=16895, st_ino=9851624184877368, st_dev=1716593648, st_nli
    12 nk=1, st_uid=0, st_gid=0, st_size=0, st_atime=1519773535, st_mtime=1519773535, s
    13 t_ctime=1483872753)
    14 >>>

    从上述示例程序可看出,os.stat可以的st_mode可以区分文件和目录,只是相关的输出可读性不好。

  • os.sep   
    输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
      1 >>> import os
    2 >>> os.sep
    3 '\\'
  • os.linesep   
    输出当前平台使用的行终止符,win下为"\r\n",Linux下为"\n"
      1 >>> import os
    2 >>> os.linesep
    3 '\r\n'
  • os.path.sep   
    输出用于分割文件路径的字符串
      1 >>> os.path.sep
    2 '\\'
  • os.name    输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
      1 >>> import os
    2 >>> os.name
    3 'nt'
  • os.system("bash command") 
    运行shell命令并返回结果
      1 >>> import os
    2 >>> os.system('dir')
    3 驱动器 C 中的卷是 Windows7_OS
    4 卷的序列号是 1A68-A0E3
    5
    6 C:\Users\Maxwell 的目录
    7
    8 2018/01/24 14:23 <DIR> .
    9 2018/01/24 14:23 <DIR> ..
    10 2017/08/18 11:29 49 .bash_history
  • os.environ 
    获取系统环境变量
      1 >>> import os
    2 >>> os.environ
    3 environ({'ALLUSERSPROFILE': 'C:\\ProgramData', 'APPDATA': 'C:\\Users\\Maxwell\\A
    4 ppData\\Roaming', 'COMMONPROGRAMFILES': 'C:\\Program Files\\Common Files', 'COMM
    5 ONPROGRAMFILES(X86)': 'C:\\Program Files (x86)\\Common Files', 'COMMONPROGRAMW64
    6 32': 'C:\\Program Files\\Common Files', 'COMMPATH': 'C:\\Program Files\\Lenovo\\
    7 Communications Utility', 'COMPUTERNAME': 'MAXWELL-PC', 'COMSPEC': 'C:\\windows\\
    8 system32\\cmd.exe', 'CONFIGSETROOT': 'C:\\windows\\ConfigSetRoot', 'FP_NO_HOST_C
    9 HECK': 'NO', 'HOMEDRIVE': 'C:', 'HOMEPATH': '\\Users\\Maxwell', 'LOCALAPPDATA':
    10 'C:\\Users\\Maxwell\\AppData\\Local', 'LOGONSERVER': '\\\\MAXWELL-PC', 'NUMBER_O
    11 F_PROCESSORS': '4', 'OS': 'Windows_NT', 'PATH': 'C:\\ProgramData\\Oracle\\Java\\
    12 javapath;C:\\Program Files (x86)\\Intel\\iCLS Client\\;C:\\Program Files\\Intel\
    13 \iCLS Client\\;C:\\windows\\system32;C:\\windows;C:\\windows\\System32\\Wbem;C:\
    14 \windows\\System32\\WindowsPowerShell\\v1.0\\;C:\\Program Files (x86)\\Intel\\In
    15 tel(R) Management Engine Components\\DAL;C:\\Program Files\\Intel\\Intel(R) Mana
    16 gement Engine Components\\DAL;C:\\Program Files (x86)\\Intel\\Intel(R) Managemen
    17 t Engine Components\\IPT;C:\\Program Files\\Intel\\Intel(R) Management Engine Co
    18 mponents\\IPT;C:\\Program Files (x86)\\NVIDIA Corporation\\PhysX\\Common;C:\\Pro
    19 gram Files\\Lenovo\\Fingerprint Manager Pro\\;C:\\Program Files (x86)\\Common Fi
    20 les\\Lenovo;C:\\ProgramData\\Lenovo\\ReadyApps;C:\\Program Files\\Git\\cmd;C:\\P
    21 rogram Files\\TortoiseGit\\bin;C:\\Program Files (x86)\\MobaXterm.Pro.9.3\\MobaX
    22 term_v9.3;C:\\Program Files (x86)\\SecureCRT6.2.0.195;C:\\Program Files (x86)\\S
    23 ecureCRT V6.5.8.380;C:\\Program Files (x86)\\SecureCRTSecureFX_HH_x64_7.0.0.326\
    24 \App\\VanDyke Clients;C:\\Program Files\\VanDyke Software\\SecureCRT;C:\\Program
    25 Files\\Java\\jdk1.8.0_60\\bin;C:\\Program Files\\Intel\\WiFi\\bin\\;C:\\Program
    26 Files\\Common Files\\Intel\\WirelessCommon\\;C:\\Program Files (x86)\\python3.6
    27 .1\\Scripts\\;C:\\Program Files (x86)\\python3.6.1\\;C:\\Program Files\\Intel\\W
    28 iFi\\bin\\;C:\\Program Files\\Common Files\\Intel\\WirelessCommon\\', 'PATHEXT':
    29 '.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC', 'PROCESSOR_ARCHITECTUR
    30 E': 'AMD64', 'PROCESSOR_IDENTIFIER': 'Intel64 Family 6 Model 78 Stepping 3, Genu
    31 ineIntel', 'PROCESSOR_LEVEL': '6', 'PROCESSOR_REVISION': '4e03', 'PROGRAMDATA':
    32 'C:\\ProgramData', 'PROGRAMFILES': 'C:\\Program Files', 'PROGRAMFILES(X86)': 'C:
    33 \\Program Files (x86)', 'PROGRAMW6432': 'C:\\Program Files', 'PROMPT': '$P$G', '
    34 PSMODULEPATH': 'C:\\windows\\system32\\WindowsPowerShell\\v1.0\\Modules\\', 'PUB
    35 LIC': 'C:\\Users\\Public', 'READYAPPS': 'C:\\ProgramData\\Lenovo\\ReadyApps', 'S
    36 ESSIONNAME': 'Console', 'SWSHARE': 'C:\\SWSHARE', 'SYSTEMDRIVE': 'C:', 'SYSTEMRO
    37 OT': 'C:\\windows', 'TEMP': 'C:\\Users\\Maxwell\\AppData\\Local\\Temp', 'TMP': '
    38 C:\\Users\\Maxwell\\AppData\\Local\\Temp', 'TVT': 'C:\\Program Files (x86)\\Leno
    39 vo', 'TVTCOMMON': 'C:\\Program Files (x86)\\Common Files\\Lenovo', 'USERDOMAIN':
    40 'Maxwell-PC', 'USERNAME': 'Maxwell', 'USERPROFILE': 'C:\\Users\\Maxwell', 'WIND
    41 IR': 'C:\\windows', 'WINDOWS_TRACING_FLAGS': '3', 'WINDOWS_TRACING_LOGFILE': 'C:
    42 \\BVTBin\\Tests\\installpackage\\csilogfile.log'})
  • os.path.abspath(path) 
    返回path规范化的绝对路径
      1 >>> import os
    2 >>> os.path.abspath('.')
    3 'C:\\Users\\Maxwell'
  • os.path.split(path) 
    将path分割成目录和文件名二元组返回,最后一级不管为目录还是具体的文件都作为文件名,前面的路径作为路径
      1 >>> import os
    2 >>> os.path.split('C:\\Users\\Maxwell\\CMB\\PB40')
    3 ('C:\\Users\\Maxwell\\CMB', 'PB40')
    4 >>> os.path.isdir('C:\\Users\\Maxwell\\CMB\\PB40')
    5 True
    6 >>>
  • os.path.dirname(path) 
    返回path的目录,如果path是相对路径,也返回相对路径,如果path是绝对路径,也返回绝对路径
      1 >>> import os
    2 >>> os.path.dirname('.')
    3 ''
    4 >>> os.getcwd()
    5 'C:\\Users\\Maxwell'
    6 >>> os.path.dirname('C:\\Users\\Maxwell')
    7 'C:\\Users'
  • os.path.basename(path) 
    返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
      1 >>> import os
    2 >>> os.path.basename('C:\\Users\\Beyondi')
    3 'Beyondi'
    4 >>> os.path.basename('C:\\Users\\Beyondi\\test.txt')
    5 'test.txt'
  • os.path.exists(path) 
    如果path存在,返回True;如果path不存在,返回False
      1 >>> import os
    2 >>> os.path.exists('C:\\Users\\Beyondi')
    3 True
    4 >>> os.path.exists('C:\\Users\\Beyondi007')
    5 False
  • os.path.isabs(path) 
    如果path是绝对路径,返回True.注意这里只是从形式上判断,不存在的目录不会报错
      1 >>> import os
    2 >>> os.path.isabs('.')
    3 False
    4 >>> os.path.isabs('C:\\Users\\Beyondi')
    5 True
    6 >>> os.path.isabs('C:\\Users\\Beyondi007')
    7 True
    8 >>> os.path.exists('C:\\Users\\Beyondi007')
    9 False
  • os.path.isfile(path) 
    如果path是一个存在的文件,返回True。否则返回False
      1 >>> import os
    2 >>> os.path.isfile('C:\\Users\\Beyondi')
    3 False
    4 >>> os.path.isfile('C:\\Users\\Beyondi\\test.txt')
    5 True
    6 >>> os.path.isfile('C:\\Users\\Beyondi\\test007.txt')
    7 False
  • os.path.isdir(path) 
    如果path是一个存在的目录,则返回True。否则返回False
      1 >>> import os
    2 >>> os.path.isdir('.')
    3 True
    4 >>> os.path.isdir('C:\\Users\\Beyondi')
    5 True
    6 >>> os.path.isdir('C:\\Users\\Beyondi007')
    7 False
    8 >>> os.path.isdir('C:\\Users\\Beyondi\\test.txt')
    9 False
  • os.path.join(path1, path2[, ...]])  将多个路径(文件名)组合后返回,这里仅仅是完成拼接而已,不会判断路径或文件的真实存在性。
      1 >>> import os
    2 >>> os.path.join('C:\\Users\\Beyondi','001','002')
    3 'C:\\Users\\Beyondi\\001\\002'
    4 >>> os.path.join('000','001','002')
    5 '000\\001\\002'
    6 >>> os.path.join('0.txt','1.txt','2.txt')
    7 '0.txt\\1.txt\\2.txt'
  • os.path.getatime(path) 
    返回path所指向的文件或者目录的最后存取时间
  • os.path.getmtime(path) 
    返回path所指向的文件或者目录的最后修改时间
      1 >>> import os
    2 >>> os.path.getatime('C:\\Users\\Beyondi')
    3 1515454528.3171692
    4 >>> os.path.getmtime('C:\\Users\\Beyondi')
    5 1515454528.3171692

    这里的时间,可读性不好…

三.sys模块的常见用法

  • sys.argv           命令行参数List,第一个元素是程序本身路径
  • sys.exit(n)        退出程序,正常退出时exit(0)
  • sys.version       
    获取Python解释程序的版本信息
      1 >>> import sys
    2 >>> sys.version
    3 '3.6.1 (v3.6.1:69c0db5, Mar 21 2017, 18:41:36) [MSC v.1900 64 bit (AMD64)]'
  • sys.path          
    返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
      1 >>> import sys
    2 >>> sys.path
    3 ['', 'C:\\Program Files (x86)\\python3.6.1\\python36.zip', 'C:\\Program Files (x
    4 86)\\python3.6.1\\DLLs', 'C:\\Program Files (x86)\\python3.6.1\\lib', 'C:\\Progr
    5 am Files (x86)\\python3.6.1', 'C:\\Program Files (x86)\\python3.6.1\\lib\\site-p
    6 ackages']
  • sys.platform       返回操作系统平台名称,不太准确
  • sys.stdout.write('please:') 
    控制台上行打印字符串和长度
      1 >>> import sys
    2 >>> sys.stdout.write('please:')
    3 please:7
    4
  • val = sys.stdin.readline()[:-1]
    通过变量存储标准输入的字符串
      1 >>> import sys
    2 >>> val = sys.stdin.readline()[:-1]
    3 asdf
    4 >>> print(val)
    5 asdf

四.总结

总结来看,os和sys模块的功能有限,如果要实现文件和系统层面较为复杂的功能,还需要借助其他模块(如shutil)。

day5-os、sys模块的更多相关文章

  1. 小白的Python之路 day5 os,sys模块详解

    os模块详解 1.作用: 提供对操作系统调用的接口 2.常用方法: os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径os.chdir("dirname" ...

  2. python 常用模块之random,os,sys 模块

    python 常用模块random,os,sys 模块 python全栈开发OS模块,Random模块,sys模块 OS模块 os模块是与操作系统交互的一个接口,常见的函数以及用法见一下代码: #OS ...

  3. python笔记-1(import导入、time/datetime/random/os/sys模块)

    python笔记-6(import导入.time/datetime/random/os/sys模块)   一.了解模块导入的基本知识 此部分此处不展开细说import导入,仅写几个点目前的认知即可.其 ...

  4. python学习之路-6 冒泡算法、递归、反射、os/sys模块详解

    算法 冒泡算法 # 冒泡算法就是将需要排序的元素看作是一个个"气泡",最小的"气泡"最先浮出水面,排在最前面.从小到大依次排列. # 代码如下: li = [9 ...

  5. Day 4-3 os & sys模块

    常用方法: import os os.getcwd() # 获取当前程序的工作路径(python解释器的运行路径,不是脚本所在的路径.) os.listdir() # 获取当前程序根目录下的所有文件夹 ...

  6. #16 os&sys模块

    前言 在编写Python程序的时候,可能需要和操作系统进行交互,比如获取某个目录下的内容.更改运行目录.更改环境变量等操作.在Python中有两个模块将这些问题完美解决,一起看看哇! 一.os模块 o ...

  7. python笔记-6(import导入、time/datetime/random/os/sys模块)

    一.了解模块导入的基本知识 此部分此处不展开细说import导入,仅写几个点目前的认知即可.其它内容待日后有深入理解了再来细说 1.import可以导入的两种不同的内容 1.1 *.py文件结尾的文件 ...

  8. 10 python os&sys 模块

    1.os模块 os模块提供了很多允许你的程序与操作系统直接交互的功能 os模块的主要功能:处理文件和目录,系统相关,执行命令,管理进程 检验给出的路径是否是一个文件:os.path.isfile() ...

  9. (转)python之os,sys模块详解

    python之sys模块详解 原文:http://www.cnblogs.com/cherishry/p/5725184.html sys模块功能多,我们这里介绍一些比较实用的功能,相信你会喜欢的,和 ...

  10. Python OS & sys模块

    os模块(* * * *) os模块是与操作系统交互的一个接口 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname" ...

随机推荐

  1. CodeForces - 528D Fuzzy Search (FFT求子串匹配)

    题意:求母串中可以匹配模式串的子串的个数,但是每一位i的字符可以左右偏移k个位置. 分析:类似于 UVALive -4671. 用FFT求出每个字符成功匹配的个数.因为字符可以偏移k个单位,先用尺取法 ...

  2. LightOJ - 1074 Extended Traffic (SPFA+负环)

    题意:N个点,分别有属于自己的N个busyness(简称b),两点间若有边,则边权为(ub-vb)^3.Q个查询,问从点1到该点的距离为多少. 分析:既然是差的三次方,那么可能有负边权的存在,自然有可 ...

  3. 关于hibernate插入数据到mysql数据库中文乱码问题的解决

    要想解决这个问题就要找到问题的症结所在 1.首先将数据提交到action输出看action里的数据是不是中文乱码,结果很遗憾并不是这里的问题 2.设置数据库连接url: 3.打开mysql安装文件里的 ...

  4. Struts2.5.12中动态方法调用问题

    使用版本:struts-2.5.12-all 出现问题:在开启动态方法调用后,找不到没有匹配的路径映射 <constant name="struts.enable.DynamicMet ...

  5. Tomcat的工作模式和运行模式

    (1)工作模式 Tomcat作为servlet容器,有三种工作模式: 1.独立的servlet容器,servlet容器是web服务器的一部分: 2.进程内的servlet容器,servlet容器是作为 ...

  6. saltstack1

    saltstack三种运行模式: local本地.master/minion(类似于agent).salt ssh saltstack三大功能: 远程执行.配置管理.云管理 saltstack安装:1 ...

  7. mysql left join中where和on条件的区别

    left join中关于where和on条件的几个知识点: 1.多表left join是会生成一张临时表,并返回给用户 2.where条件是针对最后生成的这张临时表进行过滤,过滤掉不符合where条件 ...

  8. 20145303刘俊谦 《Java程序设计》实验四 实验报告

    实验要求 完成实验.撰写实验报告,实验报告以博客方式发表在博客园,注意实验报告重点是运行结果,遇到的问题(工具查找,安装,使用,程序的编辑,调试,运行等).解决办法(空洞的方法如"查网络&q ...

  9. PHP的memory_limit引起的问题

    在运行PHP程序,通常会遇到下面的错误, 这个意味着PHP脚本使用了过多的内存,并超出了系统对其设置的允许最大内存.解决这个问题,首先需要查看你的程序是否分配了过多的内存,在程序没有问题的情况下,你可 ...

  10. 防止xss(脚本攻击)的方法之过滤器

    一  什么是脚本注入 概念我就不说了 直接百度一份 XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中.比如这些代码包括HTML代码和客户端 ...