python学习笔记-Day7(configparser模块、shutil、压缩与解压模块、subprocess)

configparser模块

# configparser用于处理特定格式的文件,其本质上是利用open来操作文件

# 下边我们就创建这种特定格式配置文件,来操作以下这里模块方法

--------------test.conf----------------
[section1]   # configparser 会认定以中括号括住的为一个节点(node)
k1 = 111   # 节点下,每一行配置文件为键值对存在(也可以写成 k2:123)
k2 = v2
k3 = 123
k4 = True
k10 = 100

[section2]
k1 = v1

# 封装一个对象
config = configparser.ConfigParser()

# 获取所有节点(sections方法)
config.read(‘test.conf‘,encoding=‘utf-8‘)
ret = config.sections()   # 获取所有使用中括号的节点名称
print(ret)

==> [‘section1‘, ‘section2‘] # section方法返回一个列表,包含所有节点名称

# 获取指定节点下所有的键值对(items方法)
ret = config.items(‘section1‘)   # 获取文件的 key = v 或 key:v 等 键值对
print(ret)

==> [(‘k1‘, ‘123‘), (‘k2‘, ‘v2‘), (‘k3‘, ‘123‘), (‘k4‘, ‘True‘), (‘k10‘, ‘100‘)]

# 获取指定节点下所有的键(options方法)
ret = config.options(‘section1‘)
print(ret)

==> [‘k1‘, ‘k2‘, ‘k3‘, ‘k4‘, ‘k10‘] 

# 获取指定节点下指定key的值 (get方法)
# 注意,下边强制转换不成功是会报错的
ret1 = config.get(‘section1‘, ‘k1‘)    # 获取section节点下的k1键对应的值
ret2 = config.getint(‘section1‘, ‘k3‘)  # 获取section1节点下k3键对应的值,并将该值转换为Int类型
ret3 = config.getfloat(‘section1‘, ‘k3‘)  # 获取section1节点下k3键对应的值,并将该值转换为float类型
ret4 = config.getboolean(‘section1‘, ‘k4‘) # 获取section1节点下k4键对应的值,并将该值转换为boolean类型
print(ret1,ret2,ret3,ret4)

==> 111 123 123.0 True  

### 检查、删除、添加节点 ###
# 检查节点(has_section方法)
has_sec = config.has_section(‘section1‘) # 检查是否有section1节点
print(has_sec)

==> True # 返回boolean值

# 添加节点 (add_section方法)
config.add_section(‘SEC_1‘)   # 添加SEC_1节点
config.write(open(‘test.conf‘, ‘w‘))   # 将修改的内容写入到test.conf

# 删除节点 (remove_section方法)
config.remove_section(‘SEC_1‘) # 删除SEC_1节点
config.write(open(‘test.conf‘, ‘w‘))   # 将修改的内容写入到test.conf

### 检查、删除、设置指定组内的键值对 ###
# 检查键值对 (has_option方法)
has_opt = config.has_option(‘section1‘, ‘k1‘) # 检查section1节点是否有k1键
print(has_opt)

# 删除键值对 (remove_option方法)
config.remove_option(‘section1‘, ‘k1‘)  # 删除section1节点的k1键对应的键值对(这一行)
config.write(open(‘test.conf‘, ‘w‘))   # 将修改的内容写入到test.conf

# 设置键值对 (set方法)
config.set(‘section1‘, ‘k10‘, "123") # 设置(有修改,无添加)section1节点,k10=123
config.write(open(‘test.conf‘, ‘w‘)) # 将修改的内容写入到test.conf

# 注意,我们配置文件被读取后,放入内存中
# 我们刚刚所做的一切的增删改,都是操作的内存中已加载的配置文件,
# 并没有对实际文件有所改变,所以我们需要执行write方法写入配置文件中

shutil

# 将文件内容拷贝到另一个文件中
shutil.copyfileobj(open(‘old.xml‘,‘r‘), open(‘new.xml‘, ‘w‘))

# 拷贝文件
shutil.copyfile(‘f1.log‘, ‘f2.log‘)

# 拷贝文件和权限
shutil.copy(‘f1.log‘, ‘f2.log‘)

# 递归的去拷贝文件夹,并忽略拷贝pyc结尾,和tmp开头的文件
shutil.copytree(‘folder1‘, ‘folder2‘, ignore=shutil.ignore_patterns(‘*.pyc‘, ‘tmp*‘))

# 递归的去删除文件
shutil.rmtree(‘folder1‘)

# 递归的去移动文件,它类似mv命令,其实就是重命名。
shutil.move(‘folder1‘, ‘folder3‘)

压缩与解压(zipfile、tarfile)

# 压缩解压 zip
import zipfile

# 压缩
z = zipfile.ZipFile(‘test.zip‘,‘w‘)  # 创建一个 以写的方式写入test.zip  的对象
z.write(‘xml_t2.xml‘)  # 添加xml_t2.xml文件到test.zip
z.write(‘xml_t3.xml‘)  # 添加xml_t3.xml文件到test.zip
z.close()   

# 解压
z = zipfile.ZipFile(‘test.zip‘, ‘r‘)
z.extractall()  # 解压所有zip
# z.extract()   # 指定解压单个
z.close()
# 压缩解压 tarfile
import tarfile

# 压缩
tar = tarfile.open(‘your.tar‘, ‘w‘) # 创建一个 以写的方式写入test.tar  的对象
tar.add(‘xml_t2.xml‘,arcname=‘xml2.xml‘)  # 添加tar,并重命名xml2.xml
tar.add(‘xml_t3.xml‘,arcname=‘xml3.xml‘)
tar.close()

# 解压
tar = tarfile.open(‘your.tar‘, ‘r‘)
tar.extractall()  # 解压全部,并可设置解压地址
tar.close()

subprocess

# call  执行命令,返回状态码
ret = subprocess.call(‘dir‘, shell=True)
ret = subprocess.call([‘ipconfig‘,‘/all‘], shell=False)   # shell为False,需要传入列表

# check_call 执行命令,如果执行状态码
ret = subprocess.check_call([‘ipconfig‘,‘/all‘])
ret = subprocess.check_call(‘exit 1‘,shell=True)  # 没有exit命令,会抛异常

# check_output 执行命令,如果状态码是0,则返回执行结果,否则抛异常
subprocess.check_output([‘echo‘, ‘hello world‘])
subprocess.check_output(‘echo hello‘, shell=True)

# popen 方法
obj = subprocess.Popen("mkdir t3", shell=True, cwd=‘/home/dev‘,)  # 跳转到/home/dev,执行命令

# popen 管道使用
obj = subprocess.Popen(["python"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, universal_newlines=True)  # 指定stdin、stdout、stderr流
obj.stdin.write("print(1)\n")  # 写入print(1) 的stdin流
obj.stdin.write("print(2)")
obj.stdin.close()

cmd_out = obj.stdout.read()  # 读取stdout 数据
obj.stdout.close()
cmd_error = obj.stderr.read() # 读取stderr数据
obj.stderr.close()

# popen 读取管道另一种方法
out_err_list = obj.communicate() # 生成一个列表,列表包含stdout和stderr数据,是一个综合方法

print(cmd_out)
print(cmd_error)
时间: 2024-12-26 01:40:57

python学习笔记-Day7(configparser模块、shutil、压缩与解压模块、subprocess)的相关文章

Python学习笔记——基础篇【第五周】——常用模块学习

模块介绍 本节大纲: 模块介绍 time &datetime模块   (时间模块) random   (随机数模块) os   (系统交互模块) sys shutil   (文件拷贝模块) json & picle shelve   (封装模块) xml处理 yaml处理 configparser hashlib subprocess logging模块 模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的

python学习笔记-Day5(反射、特殊方法、OS模块)

反射 # 反射(或叫自省): 有时候我们会碰到这样的需求,需要执行对象的某个方法,或是需要对对象的某个字段赋值,而方法名或是字段名在编码代码时并不能确定,需要通过参数传递字符串的形式输入 # 这就是我们反射功能: 通过字符串形式去调用对象 # 例, 我有一个导向页面commons.py def login(): print('登录') def home(): print('HOME PAGE') def logout(): print('logout !!!') # 我需要根据用户输入,去执行对

Python学习笔记——基础篇【第六周】——hashlib模块

常用模块之hashlib模块 用于加密相关的操作,3.x里代替了md5模块和sha模块,主要提供 SHA1, SHA224, SHA256, SHA384, SHA512 ,MD5 算法 import md5 hash = md5.new() hash.update('admin') print hash.hexdigest() MD5-废弃 import sha hash = sha.new() hash.update('admin') print hash.hexdigest() sha-废

Python学习笔记——基础篇【第六周】——logging模块

常用模块之logging 用于便捷记录日志且线程安全的模块 import logging logging.basicConfig(filename='log.log', format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s', datefmt='%Y-%m-%d %H:%M:%S %p', level=10) logging.debug('debug') logging.info('info') loggi

Python学习笔记day7

面向对象(类)二 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象,根据模板创建的实例(即:对象),实例用于调用被包装在类中的函数 面向对象三大特性:封装.继承和多态 类的多继承实例: class A: def f2(self): print('f2 from A') class B(A): def f1(self): print('f2 from B') class C(A):

Python学习笔记——基础篇【第五周】——os模块和sys模块

OS模块 提供对操作系统进行调用的接口 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录:相当于shell下cd os.curdir 返回当前目录: ('.') os.pardir 获取当前目录的父目录字符串名:('..') os.makedirs('dirname1/dirname2') 可生成多层递归目录 os.removedirs('dirname1') 若目录为空,则删除,并递归到上一级

PYTHON学习笔记-DAY-7

面向对象高级语法部分 静态方法.类方法.属性方法 类的特殊方法 反射 异常处理 Socket开发基础 1.1 静态方法,类方法,属性方法 # Author AlleyYu # 静态方法 # 通过@staticmethod装饰器即可把其装饰的方法变为一个静态方法,什么是静态方法呢?其实不难理解,普通的方法,可以在实例化后直接调用,并且在方法里可以通过self.调用实例变量或类变量,但静态方法是不可以访问实例变量或类变量的,一个不能访问实例变量和类变量的方法,其实相当于跟类本身已经没什么关系了,它与

Python学习笔记——基础篇【第五周】——random模块

random模块 随机数 mport random print random.random() print random.randint(1,2) print random.randrange(1,10) 生成随机验证码 import random checkcode = '' for i in range(4): current = random.randrange(0,4) if current != i: temp = chr(random.randint(65,90)) else: te

Python学习笔记(三十二)常用内建模块(1)— datetime

>>> from datetime import datetime >>> now = datetime.now() # 获取当前datetime >>> print(now) 2015-05-18 16:28:07.198690 >>> print(type(now)) <class 'datetime.datetime'> 获取指定日期和时间 要指定某个日期和时间,我们直接用参数构造一个datetime: >&g