在Linux上如果我们要操作文件、目录,可以在命令行下面输入操作系统提供的各种命令来完成,比如dir、cp等命令。 在Python程序中执行这些目录和文件的操作可以使用python提供的os或sys模块。 - OS模块 -os模块负责程序与操作系统的交互,提供了访问操作系统底层的接口。sys模块负责程序与python解释器的交互,提供了一系列的函数和变量,用于操控python的运行时环境。
  •  
os.getcwd() 获取    当前工作目录,即当前Python脚本工作的目录路径os.chdir("dirname")改变当前脚本工作目录;相当于shell下cdos.curdir 返回当前目录:('.')os.pardir 返回当前目录的父目录字符串名:('..')os.makedirs('dirname1/dirname2')可生成多层递归目录os.removedirs('dirname1') 若目录为空 ,则删除,并地柜到上一级目录,如若也为空,则删除,以此类推os.mkdir('dirname') 生成单级目录;相当于shell中mkdir dirnameos.rmdir("dirname") 删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirnameos.listdir("dirname") 列出指定目录下的所有文件和子目录,煲剧哦隐藏文件,并以列表方式打印os.remove() 删除一个文件os.rename("oldname","newname") 重命名文件/目录os.stat("path/filename") 获取文件/目录信息os.sep 输出操作系统特定的路径分隔符,win下为“\\”,linux下为“/”os.linesep 输出当前平台使用的行终止符,win下为“\t\n”,linux下为“\n”os.pathsep 输出用于分隔文件路径的字符串os.name 输出置顶字符串指示当前使用平台。win->'nt';linux->'posix'os.system("bash command") 运行shell命令,直接显示os.environ 获取系统环境变量os.path.abspath(path) 返回path规范化的绝对路径os.path.split(path) 将path分隔成目录和文件名二元组返回os.path.dirname(path) 返回path的目录。其实就是os.path.split(path)的第一个元素os.path.basename(path) 返回path最后的文件名。如果path以/或、结尾,那么就会返回空值。即os.path.split(path)的第二个元素os.path.exist(path) 如果path存在,返回true;如果path不存在,返回Falseos.path.isabs(path) 如果path是绝对路径,返回Trueos.path.isfile(path) 如果path是一个存在的文件,返回True。否则返回Falseos.path.isdir(path) 如果path是一个存在的目录,则返回True。否则返回Falseos.path.join(path[,path2[,...]])将多个路径组合后返回,第一个绝对路径之前的参数将被忽略os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间
 - Shutil模块 -
复制文件的函数居然在os模块中不存在!原因是复制文件并非由操作系统提供的系统调用。理论上讲,我们通过读写文件可以完成文件复制,只不过要多写很多代码。shutil模块提供了copyfile()的函数,你还可以在shutil模块中找到很多实用函数,它们可以看做是os模块的补充。
  •  
copyfile(src, dst):从源src复制到dst中去。当然前提是目标地址是具备可写权限(异常信息为IOException),如果当前的dst已存在的话就会被覆盖掉。copymode(src, dst):只是会复制其权限其他的东西是不会被复制的。copystat(src, dst):复制权限、最后访问时间、最后修改时间。copy(src, dst) :复制一个文件到一个文件或一个目录。copy2(src, dst) :在copy上的基础上再复制文件最后访问时间与修改时间也复制过来了,类似于cp –p的东西。move(src, dst) :移动一个文件到一个目录。如果源和目标在同一路径,操作相当于是rename操作,只是改名。shutil.disk_usage():获取当前目录磁盘信息,如total、used、free等信息。copytree(olddir, newdir, True/Flase):把olddir拷贝一份newdir,如果第3个参数是True,则复制目录时将保持文件夹下的符号连接,如果第3个参数是False,则将在复制的目录下生成物理副本来替代符号连接。
- SYS模块 -
  •  
sys.argv[0]:命令行参数List,第一个元素是程序本身路径。sys.modules.keys():返回所有已经导入的模块列表。sys.exc_info():获取当前正在处理的异常类,exc_type、exc_value、exc_traceback当前处理的异常详细信息。sys.exit(n):退出程序,正常退出时exit(0)。sys.hexversion:获取Python解释程序的版本值,16进制格式如:0x020403F0。sys.version:获取Python解释程序的版本信息。sys.maxint:最大的Int值。sys.maxunicode:最大的Unicode值。sys.modules:返回系统导入的模块字段,key是模块名,value是模块。sys.path:返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值。sys.platform:返回操作系统平台名称。sys.stdout:标准输出。sys.stdin:标准输入。sys.stderr:错误输出。sys.exc_clear():用来清除当前线程所出现的当前的或最近的错误信息。sys.exec_prefix:返回平台独立的python文件安装的位置。sys.byteorder:本地字节规则的指示器,big-endian平台的值是’big’,little-endian平台的值是’little’。sys.copyright:记录python版权相关的东西。sys.api_version:解释器的C的API版本
 - PyMysql模块 -目前Python 3操作MySQL的驱动常用的有pymysql和mysqlclient。 使用这种数据库接口大多是就是执行连接数据库->执行query->提取数据->关闭连接这几个步骤。pymysql提供比较关键的对象,分别是Connection、Cursor、Result,使用方式上与MySQLdb或mysqlclient没什么差别。- Request模块 -Requests 是使用 Apache2 Licensed 许可证的 HTTP 库。用 Python 编写,真正的为人类着想。 Python 标准库中的 urllib2 模块提供了你所需要的大多数 HTTP 功能,但是它的 API 太渣了。它是为另一个时代、另一个互联网所创建的。它需要巨量的工作,甚至包括各种方法覆盖,来完成最简单的任务。 在Python的世界里,事情不应该这么麻烦。Requests 使用的是 urllib3,因此继承了它的所有特性。Requests 支持 HTTP 连接保持和连接池,支持使用 cookie 保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际化的 URL 和 POST 数据自动编码。现代、国际化、人性化。

Requests模块安装:

  •  
pip install requests

也可以使用easy_install安装:

  •  
easy_install requests

Requests模块使用:

  •  
getres = requests.get("https://github.com/timeline.json") ;postres = requests.post("http://httpbin.org/post");putres = requests.put("http://httpbin.org/put");deleteres = requests.delete("http://httpbin.org/delete");headres = requests.head("http://httpbin.org/get") ;optionsres = requests.options("http://httpbin.org/get");

 

以上的HTTP方法,对于WEB系统一般只支持 GET 和 POST,有一些还支持 HEAD 方法。

 

带参数的请求实例:

 

  •  
import requestsrequests.get('http://www.dict.baidu.com/s', params={'wd': 'python'})    #GET参数实例requests.post('http://www.itwhy.org/wp-comments-post.php', data={'comment': '测试POST'})    #POST参数实例

 

POST发送JSON数据:

  •  
import requestsimport jsonr = requests.post('https://api.github.com/some/endpoint', data=json.dumps({'some': 'data'}))print(r.json())

 

定制header:

  •  
import requestsimport json data = {'some': 'data'}headers = {'content-type': 'application/json',           'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:22.0) Gecko/20100101 Firefox/22.0'}
r = requests.post('https://api.github.com/some/endpoint', data=data, headers=headers)

 

解锁Python运维的常用模块_Python运维