首页 > 代码库 > python学习第五天
python学习第五天
一 常用模块
定义:可以实现某种功能的.py结尾的python文件,文件名为test.py,则模块名为test
导入方法
import 模块名
import 模块名1,模块名2
from 模块名 import * 不建议使用这种方法,容易引起模块中的方法被程序中的同名方法覆盖的错误
from 模块名 import 方法名1,方法名2
from 模块名 import 方法名 as 别名
import本质
import 包名 执行包中的__init__.py
import 模块名 将模块中所有代码赋值给以这个模块名命名的变量
from 模块名 import 方法名 把指定方法的代码赋值给以这个方法名命名的变量
导入优化
使用from import方式导入模块方法,加快程序运行速度
模块分类
标准模块
time模块
time.time() 获取时间戳
time.sleep() 程序执行间隔时间
time.gmtime() 时间戳转换为时间元组形式,以UTC时区为标准
time.localtime() 时间戳转换为时间元组形式,以本地时区为标准 x =time.localtime() print(x.tm_year) 提取时间元组中的元素
time.mktime() 时间元组转换成时间戳
time.strftime("格式",时间元组) 时间元组转换成格式化的时间
time.strptime("格式化时间","格式") 格式化时间转换成指定格式的时间元组
time.asctime() 时间元组转换成时间字符串
time.ctime() 时间戳转换成时间字符串
datetime模块
datetime.datetime.now() 获取当前时间
datetime.datetime.now()+datetime.timedelta() 获取几天前或几天后的时间
random模块
random.random() 获取随机浮点数 范围0,1
random.uniform() 获取随机浮点数
random.randint() 获取随机整数
random.randrange() 获取随机整数,不包括结尾参数
random.choice() 在传入序列中获取一位随机值
random.sample() 在传入序列中取出指定位数的值
random.shuffle() 将传入序列的顺序打乱
import random
checkcode =""
for i in range(4):
current = random.randrange(0,4)
if current == i:
tmp = chr(random.randint(65,90))
else:
tmp = random.randint(0,9)
checkcode += str(tmp)
print(checkcode)
以上代码实现输出四位验证码的功能
os模块
os.getcwd() 获取当前的操作目录
os.chdir() 切换工作目录
os.makedirs() 递归的创建目录
os.removedirs() 递归删除空目录
os.mkdir() 创建目录,无法递归创建
os.rmdir() 删除指定目录,无法递归删除
os.listdir() 列出指定目录下的所有内容
os.rename() 重命名文件或目录
os.stat() 查看文件属性
os.sep() 输出当前系统的路径分隔符
os.linesep() 输出当前系统的换行符
os.pathsep() 输出当前系统的文件路径分隔符
os.name() 输出当前系统类型 nt为windows
os.system() 执行当前系统的操作命令
os.environ() 输出系统环境变量
os.path.abspath() 输出文件绝对路径
os.path.split() 分隔文件目录路径和文件名
os.path.dirname() 输出路径中的所有目录
os.path.basename() 输出路径中的文件名
os.path.exists() 判断路径是否存在
os.path.isabs() 是否为绝对路径
os.path.isfile() 是否为文件
os.path.isdir() 是否为目录
os.path.join() 将多个路径组合返回,第一个绝对路径前的内容将被忽略
os.path.getatime() 文件或目录最后的存取时间
os.path.getmtime() 文件或目录最后的修改时间
sys模块
sys.argv
sys.exit() 退出程序,正常推出为exit(0)
sys.version 获取python解释器版本信息
sys.maxint 最大Int值
sys.path 返回python环境变量值
sys.platform 返回操作系统平台名称
sys.stdout.write()
val = sys.stdin.readline()[:-1]
shutil模块
shutil.copyfileobj() 传入两个文件对象,复制源文件内容到目标文件
shutil.copyfile() 输入源文件名,目标文件名进行复制
shutil.copymode() 将源文件权限模式复制给目标文件
shutil.copystat() 将源文件属性复制给目标文件
shutil.copy() 复制文件和权限
shutil.copy2() 复制文件和权限和状态信息
shutil.copytree() 递归的复制文件
shutil.rmtree() 递归删除目录
shutil.move() 递归移动文件
shutil.make_archive("压缩包名或路径","压缩类型","要压缩文件的路径")
shelve模块
通过key-value将内存数据通过文件持久化
import shelve
d =shelve.open("shelve_test")
name =[1,2,3,4]
info = {"name":"lf","age":23}
d["name"] =name 列表持久化
d["info"] =info 字典持久化
d.close()
print(d.get("info")) 取出持久化文件内容
xml模块
import xml.etree.ElementTree as ET
tree = ET.parse("xmltest.xml")
root = tree.getroot()
print(root.tag)
# 遍历xml文档
for child in root:
print(child.tag, child.attrib) 打印xml标签,属性
for i in child:
print(i.tag, i.text) 打印标签,文本
# 只遍历year 节点
for node in root.iter(‘year‘):
print(node.tag, node.text)
#修改
for node in root.iter(‘year‘):
new_year = int(node.text) +1
node.text =str(new_year)
node.set("updated_by","Alex")
tree.write("xmltest.xml")
#删除
for country in root.findall(‘country‘):
rank =int(country.find(‘rank‘).text)
if rank > 50:
root.remove(country)
tree.write("output.xml")
创建
import
xml.etree.ElementTree as ET
new_xml
=
ET.Element(
"namelist"
)
name
=
ET.SubElement(new_xml,
"name"
,attrib
=
{
"enrolled"
:
"yes"
})
age
=
ET.SubElement(name,
"age"
,attrib
=
{
"checked"
:
"no"
})
sex
=
ET.SubElement(name,
"sex"
)
sex.text
=
‘33‘
name2
=
ET.SubElement(new_xml,
"name"
,attrib
=
{
"enrolled"
:
"no"
})
age
=
ET.SubElement(name2,
"age"
)
age.text
=
‘19‘
et
=
ET.ElementTree(new_xml)
#生成文档对象
et.write(
"test.xml"
, encoding
=
"utf-8"
,xml_declaration
=
True
)
ET.dump(new_xml)
#打印生成的格式
import
configparser
config
=
configparser.ConfigParser()
config[
"DEFAULT"
]
=
{
‘ServerAliveInterval‘
:
‘45‘
,
‘Compression‘
:
‘yes‘
,
‘CompressionLevel‘
:
‘9‘
}
config[
‘bitbucket.org‘
]
=
{}
config[
‘bitbucket.org‘
][
‘User‘
]
=
‘hg‘
config[
‘topsecret.server.com‘
]
=
{}
topsecret
=
config[
‘topsecret.server.com‘
]
topsecret[
‘Host Port‘
]
=
‘50022‘
# mutates the parser
topsecret[
‘ForwardX11‘
]
=
‘no‘
# same here
config[
‘DEFAULT‘
][
‘ForwardX11‘
]
=
‘yes‘
with
open
(
‘example.ini‘
,
‘w‘
) as configfile:
config.write(configfile)
config.read(
‘example.ini‘
)
config[
‘bitbucket.org‘
][
‘User‘
] 读取配置选项的参数
import
hashlib
m
=
hashlib.md5() MD5方式加密,可以指定其他加密方式
m.update(b
"Hello"
) 要加密的内容,加密中文需要encode之后才能加密
m.update(b
"It‘s me"
)
print
(m.digest())
m.update(b
"It‘s been a long time since last time we ..."
)
print
(m.digest())
#2进制格式hash
print
(
len
(m.hexdigest()))
#16进制格式hash
import
hmac
h
=
hmac.new(
‘天王盖地虎‘.encode("encoding="utf-8")
,
‘宝塔镇河妖‘.encode(encoding="utf-8")
) key-values形式加密,前面指定key值,通讯双方比对key值是否相同来鉴别消息真伪,加密时需要输入bytes类型的值,加密中文需要encode之后才能加密
print(
h.hexdigest())
‘.‘
默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行
‘^‘
匹配字符开头,若指定flags MULTILINE,这种也可以匹配上(r
"^a"
,
"\nabc\neee"
,flags
=
re.MULTILINE)
‘$‘
匹配字符结尾,或e.search(
"foo$"
,
"bfoo\nsdfsf"
,flags
=
re.MULTILINE).group()也可以
‘*‘
匹配
*
号前的字符
0
次或多次,re.findall(
"ab*"
,
"cabb3abcbbac"
) 结果为[
‘abb‘
,
‘ab‘
,
‘a‘
]
‘+‘
匹配前一个字符
1
次或多次,re.findall(
"ab+"
,
"ab+cd+abb+bba"
) 结果[
‘ab‘
,
‘abb‘
]
‘?‘
匹配前一个字符
1
次或
0
次
‘{m}‘
匹配前一个字符m次
‘{n,m}‘
匹配前一个字符n到m次,re.findall(
"ab{1,3}"
,
"abb abc abbcbbb"
) 结果
‘abb‘
,
‘ab‘
,
‘abb‘
]
‘|‘
匹配|左或|右的字符,re.search(
"abc|ABC"
,
"ABCBabcCD"
).group() 结果
‘ABC‘
‘(...)‘
分组匹配,re.search(
"(abc){2}a(123|456)c"
,
"abcabca456c"
).group() 结果 abcabca456c
‘\A‘
只从字符开头匹配,re.search(
"\Aabc"
,
"alexabc"
) 是匹配不到的
‘\Z‘
匹配字符结尾,同$
‘\d‘
匹配数字
0
-
9
‘\D‘
匹配非数字
‘\w‘
匹配[A
-
Za
-
z0
-
9
]
‘\W‘
匹配非[A
-
Za
-
z0
-
9
]
‘s‘
匹配空白字符、\t、\n、\r , re.search(
"\s+"
,
"ab\tc1\n3"
).group() 结果
‘\t‘
‘(?P<name>...)‘
分组匹配 re.search(
"(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})"
,
"371481199306143242"
).groupdict(
"city"
) 结果{
‘province‘
:
‘3714‘
,
‘city‘
:
‘81‘
,
‘birthday‘
:
‘1993‘
}
re.match 从头开始匹配
re.search 匹配包含
re.findall 把所有匹配到的字符放到以列表中的元素返回
re.splitall 以匹配到的字符当做列表分隔符
re.sub 匹配字符并替换
#执行命令,返回命令执行状态 , 0 or 非0
>>> retcode = subprocess.call(["ls", "-l"])
#执行命令,如果命令结果为0,就正常返回,否则抛异常
>>> subprocess.check_call(["ls", "-l"])
0
#接收字符串格式命令,返回元组形式,第1个元素是执行状态,第2个是命令结果
>>> subprocess.getstatusoutput(‘ls /bin/ls‘) 建议使用
(0, ‘/bin/ls‘)
#接收字符串格式命令,并返回结果
>>> subprocess.getoutput(‘ls /bin/ls‘)
‘/bin/ls‘
#执行命令,并返回结果,注意是返回结果,不是打印,下例结果返回给res
>>> res=subprocess.check_output([‘ls‘,‘-l‘])
>>> res
b‘total 0\ndrwxr-xr-x 12 alex staff 408 Nov 2 11:05 OldBoyCRM\n‘
p = subprocess.Popen("df -h|grep disk",stdin=subprocess.PIPE,stdout=subprocess.PIPE,shell=True)
可用参数
- 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()函数,用于设置子进程的一些属性,如:主窗口的外观,进程的优先级等等
subprocess.popen("echo "123"|sudo -S yum -y install httpd",shell=True)
python学习第五天