day06
一.configparser模块
configparser用于处理特定格式的文件,其本质上是利用open来操作文件
1.获取所有节点
- import configparser
- config = configparser.ConfigParser()
- config.read('test.conf', encoding='utf-8') # 第一个参数为文件路径
- ret = config.sections()
- print(ret)
2.获取指定节点下的所有键
- import configparser
- config = configparser.ConfigParser()
- config.read('test.conf', encoding='utf-8')
- ret = config.options('test1')
- print(ret)
3.获取指定节点下的所有的键值对
- import configparser
- config = configparser.ConfigParser()
- config.read('test.conf', encoding='utf-8')
- ret = config.items('test1')
- print(ret)
4.获取指定节点下指定的key的值
- import configparser
- config = configparser.ConfigParser()
- config.read('test.conf', encoding='utf-8')
- v = config.get('test1', 'k1')
- # v = config.getint('test1', 'k1') # 默认获取的值为str类型,用getint获取的值会转为int
- # v = config.getfloat('test2', 'k1')
- # v = config.getboolean('test1', 'k1')
- print(v)
5.删除,检查,添加节点
- import configparser
- config = configparser.ConfigParser()
- config.read('test.conf', encoding='utf-8')
- # 检查
- has_sec = config.has_section('section1')
- print(has_sec)
- # 添加节点
- config.add_section("SEC_1")
- config.write(open('test.conf', 'w'))
- # 删除节点
- config.remove_section("SEC_1")
- config.write(open('test.conf', 'w'))
6、检查、删除、设置指定组内的键值对
- import configparser
- config = configparser.ConfigParser()
- config.read('test.conf', encoding='utf-8')
- # 检查
- has_opt = config.has_option('test1', 'k1')
- print(has_opt)
- # 删除
- config.remove_option('test1', 'k1')
- config.write(open('test.conf', 'w'))
- # 设置
- config.set('test1', 'k10', "123")
- config.write(open('test.conf', 'w'))
二、系统命令
可以执行shell命令的相关模块和函数有:
- os.system
- os.spawn*
- os.popen* --废弃
- popen2.* --废弃
- commands.* --废弃,3.x中被移除
- import commands
- result = commands.getoutput('cmd')
- result = commands.getstatus('cmd')
- result = commands.getstatusoutput('cmd')
commands
以上执行shell命令的相关的模块和函数的功能均在 subprocess 模块中实现,并提供了更丰富的功能。
call
执行命令,返回状态码
- ret = subprocess.call(["ls", "-l"], shell=False)
- ret = subprocess.call("ls -l", shell=True)
check_call
执行命令,如果执行状态码是 0 ,则返回0,否则抛异常
- subprocess.check_call(["ls", "-l"])
- subprocess.check_call("exit 1", shell=True)
check_output
执行命令,如果状态码是 0 ,则返回执行结果,否则抛异常
- subprocess.check_output(["echo", "Hello World!"])
- subprocess.check_output("exit 1", shell=True)
subprocess.Popen(...)
用于执行复杂的系统命令
参数:
- args:shell命令,可以是字符串或者序列类型(如:list,元组)
- bufsize:指定缓冲。0 无缓冲,1 行缓冲,其他 缓冲区大小,负值 系统缓冲
- stdin, stdout, stderr:分别表示程序的标准输入、输出、错误句柄
- preexec_fn:只在Unix平台下有效,用于指定一个可执行对象(callable object),它将在子进程运行之前被调用
- close_sfs:在windows平台下,如果close_fds被设置为True,则新创建的子进程将不会继承父进程的输入、输出、错误管道。
所以不能将close_fds设置为True同时重定向子进程的标准输入、输出与错误(stdin, stdout, stderr)。 - shell:同上
- cwd:用于设置子进程的当前目录
- env:用于指定子进程的环境变量。如果env = None,子进程的环境变量将从父进程中继承。
- universal_newlines:不同系统的换行符不同,True -> 同意使用 \n
- startupinfo与createionflags只在windows下有效
将被传递给底层的CreateProcess()函数,用于设置子进程的一些属性,如:主窗口的外观,进程的优先级等等
- import subprocess
- ret1 = subprocess.Popen(["mkdir","t1"])
- ret2 = subprocess.Popen("mkdir t2", shell=True)
执行普通命令
终端输入的命令分为两种:
- 输入即可得到输出,如:ifconfig
- 输入进行某环境,依赖再输入,如:python
- import subprocess
- obj = subprocess.Popen("mkdir t3", shell=True, cwd='/home/dev',)
- import subprocess
- obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
- obj.stdin.write("print(1)\n")
- obj.stdin.write("print(2)")
- obj.stdin.close()
- cmd_out = obj.stdout.read()
- obj.stdout.close()
- cmd_error = obj.stderr.read()
- obj.stderr.close()
- print(cmd_out)
- print(cmd_error)
- import subprocess
- obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
- obj.stdin.write("print(1)\n")
- obj.stdin.write("print(2)")
- out_error_list = obj.communicate()
- print(out_error_list)
- import subprocess
- obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)
- out_error_list = obj.communicate('print("hello")')
- print(out_error_list)
三、shutil模块
高级的 文件、文件夹、压缩包 处理模块
shutil.copyfileobj(fsrc, fdst[, length])
将文件内容拷贝到另一个文件中
- import shutil
- shutil.copyfileobj(open('old.xml','r'), open('new.xml', 'w'))
shutil.copyfile(src, dst)
拷贝文件
- shutil.copyfile('f1.log', 'f2.log')
shutil.copymode(src, dst)
仅拷贝权限。内容、组、用户均不变
- shutil.copymode('f1.log', 'f2.log')
shutil.copystat(src, dst)
仅拷贝状态的信息,包括:mode bits, atime, mtime, flags
- shutil.copystat('f1.log', 'f2.log')
shutil.copy(src, dst)
拷贝文件和权限
- import shutil
- shutil.copy('f1.log', 'f2.log')
shutil.copy2(src, dst)
拷贝文件和状态信息
- import shutil
- shutil.copy2('f1.log', 'f2.log')
shutil.ignore_patterns(*patterns)
shutil.copytree(src, dst, symlinks=False, ignore=None)
递归的去拷贝文件夹
- import shutil
- shutil.copytree('folder1', 'folder2', ignore=shutil.ignore_patterns('*.pyc', 'tmp*'))
- import shutil
- shutil.copytree('f1', 'f2', symlinks=True, ignore=shutil.ignore_patterns('*.pyc', 'tmp*'))
shutil.rmtree(path[, ignore_errors[, onerror]])
递归的去删除文件
- import shutil
- shutil.rmtree('folder1')
shutil.move(src, dst)
递归的去移动文件,它类似mv命令,其实就是重命名。
- import shutil
- shutil.move('folder1', 'folder3')
shutil.make_archive(base_name, format,...)
创建压缩包并返回文件路径,例如:zip、tar
创建压缩包并返回文件路径,例如:zip、tar
- base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,
如:www =>保存至当前路径
如:/Users/wupeiqi/www =>保存至/Users/wupeiqi/ - format: 压缩包种类,“zip”, “tar”, “bztar”,“gztar”
- root_dir: 要压缩的文件夹路径(默认当前目录)
- owner: 用户,默认当前用户
- group: 组,默认当前组
- logger: 用于记录日志,通常是logging.Logger对象
- #将 /Users/wupeiqi/Downloads/test 下的文件打包放置当前程序目录
- import shutil
- ret = shutil.make_archive("wwwwwwwwww", 'gztar', root_dir='/Users/wupeiqi/Downloads/test')
- #将 /Users/wupeiqi/Downloads/test 下的文件打包放置 /Users/wupeiqi/目录
- import shutil
- ret = shutil.make_archive("/Users/wupeiqi/wwwwwwwwww", 'gztar', root_dir='/Users/wupeiqi/Downloads/test')
shutil 对压缩包的处理是调用 ZipFile 和 TarFile 两个模块来进行的,详细:
- import zipfile
- # 压缩
- z = zipfile.ZipFile('laxi.zip', 'w')
- z.write('a.log')
- z.write('data.data')
- z.close()
- # 解压
- z = zipfile.ZipFile('laxi.zip', 'r')
- z.extractall()
- z.close()
zipfile解压缩
- import tarfile
- # 压缩
- tar = tarfile.open('your.tar','w')
- tar.add('/Users/wupeiqi/PycharmProjects/bbs2.log', arcname='bbs2.log')
- tar.add('/Users/wupeiqi/PycharmProjects/cmdb.log', arcname='cmdb.log')
- tar.close()
- # 解压
- tar = tarfile.open('your.tar','r')
- tar.extractall() # 可设置解压地址
- tar.close()
tarfile解压缩
day06的更多相关文章
- day06<面向对象>
面向对象(面向对象思想概述) 面向对象(类与对象概述) 面向对象(学生类的定义) 面向对象(手机类的定义) 面向对象(学生类的使用) 面向对象(手机类的使用) 面向对象(一个对象的内存图) 面向对象( ...
- day06 面向对象编程
面向对象: 面向对象: 世界万物,皆可分类 世界万物,皆为对象 只要是对象,就肯定属于某种品类 只要是对象,就肯定有属性 特性: 多态: 一个统一的接口,多种实现 例如: 一个 ...
- JAVAEE学习day06,面向对象
1.面向对象与面向过程思想 什么时面向过程: 面向过程的每一个步骤和过程,把每一个步骤和过程完成,然后又这些功能相互调用,完成需求 强调的时过程,所有的事情都需要自己完成 什么时面向过程: 面向对象思 ...
- Python之旅Day7 面向对象&异常处理
########################################面向对象初识######################################### 面向对象简介 面向对象编 ...
- Java基础六(自定义类、ArrayList集合)
今日内容介绍1.自定义类型的定义及使用2.自定义类的内存图3.ArrayList集合的基本功能4.随机点名器案例及库存案例代码优化 ###01引用数据类型_类 * A: 数据类型 * a: java中 ...
- 06_Java基础语法_第6天(自定义类、ArrayList集合)_讲义
今日内容介绍 1.自定义类型的定义及使用 2.自定义类的内存图 3.ArrayList集合的基本功能 4.随机点名器案例及库存案例代码优化 01引用数据类型_类 * A: 数据类型 * a: java ...
- python学习大纲目录(转自alex博客https://www.cnblogs.com/alex3714/)
day01: 介绍.基本语法.流程控制 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是个什么鬼? 数据类型初识 数据运算 ...
- 2017.9.2Java中的自定义类型的定义及使用&&自定义类的内存图
今日内容介绍 1.自定义类型的定义及使用 2.自定义类的内存图 3.ArrayList集合的基本功能 4.随机点名器案例及库存案例代码优化 01引用数据类型_类 * A: 数据类型 * a: java ...
- Java基础笔记05-06-07-08
五.今日内容介绍 1.方法基础知识 2.方法高级内容 3.方法案例 01方法的概述 * A: 为什么要有方法 * 提高代码的复用性 * B: 什么是方法 * 完成特定功能的代码块. 02方法的定义格式 ...
- Java语言学习day11--7月10日
今日内容介绍1.自定义类型的定义及使用2.自定义类的内存图3.ArrayList集合的基本功能4.随机点名器案例及库存案例代码优化 ###01引用数据类型_类 * A: 数据类型 * a: java中 ...
随机推荐
- Subsets II ——LeetCode
Given a collection of integers that might contain duplicates, nums, return all possible subsets. Not ...
- svn server安装配置
安装平台:RHEL5 1.安装软件:httpd.subversion.mod_dav_svn 2.修改配置 修改/etc/httpd/conf.d/subversion.conf.eg: LoadMo ...
- Interesting Punch-Bowl(优先队列)
/** http://acm.nyist.net/JudgeOnline/problem.php?pid=547 题意: 有一个正方形的区域 区域上面有高度不同的1*1的立方体自然有凸有凹 凹的地方可 ...
- Openstack Ceilometer监控项扩展
Openstack ceilometer主要用于监控虚拟机.服务(glance.image.network等)和事件.虚拟机的监控项主要包括CPU.磁盘.网络.instance.本文在现有监控项的基础 ...
- C#中的 IList, ICollection ,IEnumerable 和 IEnumerator
IList, ICollection ,IEnumerable 很显然,这些都是集合接口的定义,先看看定义: // 摘要: // 表示可按照索引单独访问的对象的非泛型集合. [ComVisible(t ...
- php如何同时连接多个数据库
下面是一个函数能够保证连接多个数据库的下不同的表的函数,可以收藏一下,比较实用,测试过是有用的. function mysql_oper($oper,$db,$table,$where='1',$li ...
- c# mongo 返回指定的列
var query= db.GetCollection<Merchant>("merchant").Find(Query<Merchant>.EQ(m =& ...
- [转] 关于c++的头文件依赖
http://www.cnblogs.com/yvesliao/p/3938730.html PS: 使用单向依赖 正在看google c++编程规范,里面对头文件依赖是这么说的: 1 2 3 4 5 ...
- 数据库 ORM框架 ORMLite
几个ORM框架的比较 先介绍一下ORM的概念,以前也一直听说,不过没详细了解啥意思.其全称叫做对象关系映射(Object Relation Mapping),是一种程序设计技术,用于实现面向对象编程语 ...
- Django runserver show client ip
get path of basehttp.py $ python >>> import site >>> site.getsitepackages() ['/usr ...