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

Posted Cool King

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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)

 

以上是关于python学习笔记-Day7(configparser模块shutil压缩与解压模块subprocess)的主要内容,如果未能解决你的问题,请参考以下文章

day7-Python学习笔记(十五)网络编程

python学习day7笔记

Day7: Python学习笔记之Linux——系统监控

python学习笔记-day7-python操作数据库

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

python学习笔记-day7-2-python从mysql数据库导数据到excel,读excel,修改excel