设为首页 加入收藏

TOP

Python-标准库(常用模块)(五)
2019-08-04 00:19:00 】 浏览:83
Tags:Python- 标准 常用 模块
th.isdir(path) 如果path是一个存在的目录,则返回True。否则返回False os.path.join(path1[, path2[, ...]]) 将多个路径组合后返回,第一个绝对路径之前的参数将被忽略 os.path.getatime(path) 返回path所指向的文件或者目录的最后存取时间 os.path.getmtime(path) 返回path所指向的文件或者目录的最后修改时间 os.path.getsize(path) 返回path的大小
normcase函数
在Linux和Mac平台上,该函数会原样返回path,在windows平台上会将路径中所有字符转换为小写,并将所有斜杠转换为饭斜杠。
>>> os.path.normcase('c:/windows\\system32\\')   
'c:\\windows\\system32\\'   
   
normpath函数
规范化路径,如..和/
>>> os.path.normpath('c://windows\\System32\\../Temp/')   
'c:\\windows\\Temp'   

>>> a='/Users/jieli/test1/\\\a1/\\\\aa.py/../..'
>>> print(os.path.normpath(a))
/Users/jieli/test1

四.subprocess

subprocess 称之为子进程,进程是一个正在运行的程序

为什么要使用子进程,因为之前的os.system()函数无法获取命令的执行结果,另一个问题是当我们启动了某一其他进程时无法与这个子进程进行通讯,

当要在python程序中执行系统指令时 就应该使用subprocess 自动化运维经常会使用

#测试
res = os.system("python")
print(res)
# res结果为执行状态

subprocess的使用

import subprocess

p = subprocess.Popen("ls",shell=True)
#shell=True 告诉系统这是一个指令 而不是某个文件名
#此时效果与sys.system()没有任何区别,都是将结果输出到控制台

# 那如何与这个进程交互数据呢,这需要用到三个参数
1.stdin  表示输入交给子进程的数据
2.stdout 表示子进程返回的数据
3.stderr 表示子进程发送的错误信息

#这三个参数,的类型都是管道,(管道本质就是一个文件,可以进行读写操作),使用subprocess.PIPE来获取一个管道
案例:

理解了三个参数的意义后让我们来实现一个小功能

一个子进程执行tasklist命令获取所有的任务信息,然后将结果交给另一个进程进行查找

另一个子进程执行findstr 查找某个任务信息

p1 = subprocess.Popen("tasklist",shell=True,stdout=subprocess.PIPE)
p2 = subprocess.Popen("findstr smss",shell=True,stdin=p1.stdout,stdout=subprocess.PIPE)
print(p2.stdout.read())

总结: subprocess 主要用于执行系统命令,对比sys.system 区别在于可以在进程间交换数据

五.sys 模块

sys是system的缩写,表示系统,但是要注意

sys指的是解释器自身,而非操作系统

所以该模块主要是处理与解释器相关的操作的

提供的函数和属性:

sys.argv           命令行参数List,第一个元素是程序本身路径
sys.exit(n)        退出程序,正常退出时exit(0)
sys.version        获取Python解释程序的版本信息
sys.maxint         最大的Int值
sys.path           返回模块的搜索路径,初始化时使用PYTHONPATH环境变量的值
sys.platform       返回操作系统平台名称

其中提供了有一个arg属性用于接收从控制台传入的参数,当你要开发一款命令行程序时,该属性非常重要

案例:开发一款命令行界面的文件复制工具

思路:第一个参数是当前执行文件本身,第二个参数用于接收源文件,第三个参数用于接收目标文件

import sys

source_path = sys.argv[1]
target_path = sys.argv[2]
print(source_path)
print(target_path)
with open(source_path, "rb") as f1:
    with open(target_path, "wb") as f2:
        while True:
            data = f1.read(1024)
            if not data:
                break
            f2.write(data)

六.confiparser

confiparser,翻译为配置解析,很显然,他是用来解析配置文件的,

何为配置文件?

用于编写程序的配置信息的文件

何为配置信息?

为了提高程序的扩展性,我们会把一些程序中需要用到的值交给用户来确定,比如迅雷的下载目录,同时下载数,qq的提示音等等,

作为配置信息的数据 应满足两个条件

1.数据的值不是固定的

2.可以由用户来指定的

例如我们做一个登录功能,为了方便使用我们可以将用户的用户名密码写到配置文件中,可以不需要每次都输入

配置文件编写格式

在使用该模块前必须要先知道其配置文件的格式,由于读写文件的代码是模块封装好的,所以必须按照固定的方式来边编写,才能被正常解析, 当然并不是只有python有配置文件,其他任何语言都有,但是格式是相同的!

格式:

配置文件中只允许出现两种类型的数据

第一种 section 分区 方括号中是分区的名称 例如:[ATM ]

第二种 option 选项 名称 = 值

注意:

不能出现重复的分区名

同一个分区下不能有相同的选项名

值可以是任何类型 且字符串不需要加引号

confiparser的使用

读取数据

import configparser
#获取解析器对象
config=configparser.ConfigParser()
# 读取某个配置文件
config.read('a.cfg')

#查看所有的分区
res=config.sections() #['section1', 'section2']
print(res)

#查看标题section1下所有key=value的key
options=config.options('section1')
print(options) #['k1', 'k2', 'user', 'age', 'is_admin', 'salary']

#查看标题section1下所有key=value的(key,value)格式
item_list=config.items('section1')
print(item_list) #[('k1', 'v1'), ('k2', 'v2'), ('user', 'egon'), ('age', '18'), (
首页 上一页 2 3 4 5 6 下一页 尾页 5/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇python第三天---列表的魔法 下一篇Python Threading 线程/互斥锁/死..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目