Python自动化第五周-模块

1. import导入模块

  1. improt导入模块
    1.1 定义
    a. 模块:用来从逻辑上组织python代码(变量、函数、类、逻辑:实现一个功能),本质是.py结尾的python文件(文件名:test.py,对于模块名为test)

  2. 导入方法:
    import module_name
    import module_name1, module_name2
    from module_name import *
    from module_name import m1, m2
    from module_name import mm as ms

  3. import本质:(路径搜索和搜索路径)
    导入模块的本质是把python文件解释一遍
    import test # test = ‘test.py all code’

  4. 导入优化:
    from module_name import test

  5. 模块分类:
    a.标准库
    b.开源库
    c.自定义库

2. time与datetime

  • time
    时间相关的操作,时间有三种表示方式:
    时间戳 1970年1月1日之后的秒,即:time.time()
    格式化的字符串 2014-11-11 11:11, 即:time.strftime(’%Y-%m-%d’)
    结构化时间 元组包含了:年、日、星期等… time.struct_time 即:time.localtime()
import time

x = time.time()
print(time.time())     # 时间戳 ,从1970-01-01 00:00:00 到现在的时间,单位为秒

print(time.localtime())     # 当前时间,结构体时间,元组

print(time.timezone)    # 东八区

print(time.sleep(0.1))    # 等待几秒

# 时间戳转化成元组
print(time.gmtime(x))     # 结果为UTC时区
print(time.localtime(x))  # 结果为当前时区的时间

# 元组转成时间戳
print(time.mktime(time.gmtime(x)))

# 获取元组的年月日时分秒
y = time.localtime()
print(y)
print(y.tm_year)

# 2017-11-14 10:15:00
print(time.strftime('%Y-%m-%d %H:%M:%S'))
print(time.strftime('%Y-%m-%d %H:%M:%S', y))    # 将时间戳转成格式时间
print(time.strptime('2017-11-14 10:15:00', '%Y-%m-%d %H:%M:%S'))    # 将格式化字符串时间转成元组

print(time.asctime())   # 元组转成string,如果未传时间则传当前时间
print(time.ctime())     # 传入秒、不传则当前时间,转格式化时间```
  • datetime
import datetime

print(datetime.datetime.now())  #  获取当前时间
print(datetime.datetime.now() + datetime.timedelta(3))  # 获取未来N天的时间
print(datetime.datetime.now() + datetime.timedelta(-3)) # 获取过去N天的时间
print(datetime.datetime.now() + datetime.timedelta(hours=3))  # 获取未来N小时的时间
print(datetime.datetime.now() + datetime.timedelta(hours=-3)) # 获取过去N小时的时间

这里写图片描述

3. random模块

得到随机数
import random

print(random.random())  # 不传参,随机0-1的浮点数
print(random.randint(1, 3)) # 随机[1,3]的整数
print(random.randrange(1, 3)) # 随机[1,3)的整数
print(random.choice('hello'))   # 从object随机取值,参数可以为list、str、dict、
print(random.sample('hello', 2))  # 从object随机取2个值,参数可以为list、str、dict、
print(random.uniform(1, 5)) # 随机1-5的浮点数
l = [1, 2, 3, 4, 5, 6, 7]   # 随机打乱顺序
random.shuffle(l)
print(l)
获取随机验证码:
# 实现一
import random

check_code = 'qwertyuiopasdfghjklzxcvbnmQWERTYUIOPASDFGHJKLZXCVBNM1234567890'

check_code = random.sample(check_code, 5)
check_code = ''.join(check_code)
print(check_code)

print(chr(random.randrange(65, 122)))
# 实现二
import random
checkcode = ''
for i in range(4):
    current = random.randrange(0,4)
    if current != i:
        temp = chr(random.randint(65,90))
    else:
        temp = random.randint(0,9)
    checkcode += str(temp)
print checkcode

4. os模块

用于对于系统级别的操作:

os.getcwd() #获取当前工作目录,即当前python脚本工作的目录路径
os.chdir("dirname")  #改变当前脚本工作目录;相当于shell下cd
os.curdir  #返回当前目录: ('.')
os.pardir  #获取当前目录的父目录字符串名:('..')
os.makedirs('dirname1/dirname2')    #可生成多层递归目录
os.removedirs('dirname1')    #若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推
os.mkdir('dirname')    #生成单级目录;相当于shell中mkdir dirname
os.rmdir('dirname')    #删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname
os.listdir('dirname')    #列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印
os.remove()  #删除一个文件
os.rename("oldname","newname")  #重命名文件/目录
os.stat('path/filename')  #获取文件/目录信息
os.sep    #输出操作系统特定的路径分隔符,win下为"\\",Linux下为"/"
os.linesep    #输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"
os.pathsep    #输出用于分割文件路径的字符串
os.name    #输出字符串指示当前使用平台。win->'nt'; Linux->'posix'
os.system("bash command")  #运行shell命令,直接显示
os.environ  #获取系统环境变量
os.path.abspath(path)  #返回path规范化的绝对路径
os.path.split(path)  #将path分割成目录和文件名二元组返回
os.path.dirname(path)  #返回path的目录。其实就是os.path.split(path)的第一个元素
os.path.basename(path)  #返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素
os.path.exists(path) # 如果path存在,返回True;如果path不存在,返回False
os.path.isabs(path)  #如果path是绝对路径,返回True
os.path.isfile(path)  #如果path是一个存在的文件,返回True。否则返回False
os.path.isdir(path)  #如果path是一个存在的目录,则返回True。否则返回False
os.path.join(path1[, path2[, ...]])  #将多个路径组合后返回,第一个绝对路径之前的参数将被忽略
os.path.getatime(path)  #返回path所指向的文件或者目录的最后存取时间
os.path.getmtime(path)  #返回path所指向的文件或者目录的最后修改时间

5. sys、shutil和zipfile模块

  • sys模块
    • 用于提供对解释器相关的操作
import sys
print(sys.argv)     # 命令行参数List,第一个元素是程序本身路径
print(sys.version)  # python版本信息
print(sys.path)     # 返回模块的搜索路径
print(sys.platform) # 返回系统平台名称
sys.stdout.write('good lucky')  # 打印、输出
x = sys.stdin.readline()[:-1]   # 输入
print(x)
print(sys.exit())   # 退出程序
  • shutil模块
    • 主要用于copy文件及信息
import shutil

shutil.copy('a', 'a_copy')  # 将a文件拷贝成a_copy,包括文件和权限
shutil.copy2('a', 'a_a')    # 将a文件拷贝成a'a_a.txt,包括文件和状态信息,主要用于linux系统
shutil.copyfileobj('a', 'a_copy1')    # 将文件内容拷贝到另一个文件中,可以部分内容
shutil.copymode('a', 'a_a')   # 仅拷贝权限。内容、组、用户均不变
shutil.copystat('a', 'a_a')     # 拷贝状态的信息,包括:mode bits, atime, mtime, flags
shutil.copytree('11', 'a1')   # 递归的去拷贝文件,存在则无法新建
shutil.rmtree('a1')
shutil.ignore_patterns('11', 'a2')    # 递归的去拷贝文件
shutil.move('a', 'a3')       # 递归的去移动文

"""
shutil.make_archive(base_name, format,...)

创建压缩包并返回文件路径,例如:zip、tar

base_name: 压缩包的文件名,也可以是压缩包的路径。只是文件名时,则保存至当前目录,否则保存至指定路径,
如:www                        =>保存至当前路径
如:/Users/wupeiqi/www =>保存至/Users/wupeiqi/
format:	压缩包种类,“zip”, “tar”, “bztar”,“gztar”
root_dir:	要压缩的文件夹路径(默认当前目录)
owner:	用户,默认当前用户
group:	组,默认当前组
logger:	用于记录日志,通常是logging.Logger对象
"""
shutil.make_archive('a_a', 'zip')
shutil.copyfile('a', 'b')   # 复制文件a到b,包括内容和权限
  • zipfile和tarfile模块
    • zipfile
import zipfile

# 压缩
z = zipfile.ZipFile('a_copy.zip', 'w')
z.write('a_a.txt')
z.close()

# 解压
z = zipfile.ZipFile('a_copy.zip', 'r')
z.extractall()
z.close()
  • tarfile
import tarfile

# 压缩
tar = tarfile.open('your.tar','w')
tar.add('/Users/wupeiqi/PycharmProjects/bbs2.zip', arcname='bbs2.zip')
tar.add('/Users/wupeiqi/PycharmProjects/cmdb.zip', arcname='cmdb.zip')
tar.close()

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

6. json、pickle、shelve模块

  • json、pickle
    用于序列化的两个模块
    json,用于字符串 和 python数据类型间进行转换
    pickle,用于python特有的类型 和 python的数据类型间进行转换
    Json模块提供了四个功能:dumps、dump、loads、load
    pickle模块提供了四个功能:dumps、dump、loads、load
    查看这里
    *shelve
    shelve是一个简单的k,v将内存数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据格式

import shelve, datetime

d = shelve.open('shelve_test')  # 打开一个文件

info = {'age': 22, 'job': 'it'}
name = ["alex", "rain", "test"]
d["name"] = name  # 持久化列表
d["info"] = info  # 持久化类
d['date'] = datetime.datetime.now()

d.close()

7. xml处理

# xml文件
<data>
    <country name="Liechtenstein">
        <rank updated="yes">2</rank>
        <year updated="yes">2010</year>
        <gdppc>141100</gdppc>
        <neighbor direction="E" name="Austria" />
        <neighbor direction="W" name="Switzerland" />
    </country>
    <country name="Singapore">
        <rank updated="yes">5</rank>
        <year updated="yes">2013</year>
        <gdppc>59900</gdppc>
        <neighbor direction="N" name="Malaysia" />
    </country>
    <country name="Panama">
        <rank updated="yes">69</rank>
        <year updated="yes">2013</year>
        <gdppc>13600</gdppc>
        <neighbor direction="W" name="Costa Rica" />
        <neighbor direction="E" name="Colombia" />
    </country>
</data>
# 获取xml数据
from xml.etree import ElementTree as ET

tree = ET.parse('test12_xml.xml')
root = tree.getroot()
print(root.tag)

# 遍历xml文档
for child in root:
    print(child.tag, child.attrib)
    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', 'yes')
tree.write('test12_xml.xml')

# 删除
for country in root.findall('country'):
    rank = int(country.find('rank').text)
    if rank > 50:
        root.remove(country)
tree.write('test12_xml_bak.xml')

新建xml文件:

from xml.etree import ElementTree as ET

new_xml = ET.Element('namelist')
info = ET.SubElement(new_xml, 'info', attrib={'enrolled': 'yes'})
name = ET.SubElement(info, 'name', attrib={'checked': 'yes'})
age = ET.SubElement(info, 'age', attrib={'checked': 'no'})
sex = ET.SubElement(info, 'sex')
name.text = 'test'
age.text = '22'
sex.text = 'man'
info = ET.SubElement(new_xml, 'info', attrib={'enrolled': 'yes'})
name2 = ET.SubElement(info, 'name2', attrib={'checked': 'yes'})
age2 = ET.SubElement(info, 'age2', attrib={'checked': 'no'})
sex2 = ET.SubElement(info, 'sex2')
name2.text = 'test2'
age2.text = '222'
sex2.text = 'man2'

et = ET.ElementTree(new_xml)
et.write('test13_xml.xml', encoding='utf-8', xml_declaration=True)

新建xml且内容为:

<?xml version='1.0' encoding='utf-8'?>
<namelist>
    <info enrolled="yes">
        <name checked="yes">test</name>
        <age checked="no">22</age>
        <sex>man</sex>
    </info>
    <info enrolled="yes">
        <name2 checked="yes">test2</name2>
        <age2 checked="no">222</age2>
        <sex2>man2</sex2>
    </info>
</namelist>

8. PyYAML、configparser模块

  • configparser模块
    用于生成和修改常见配置文档。
    新建配置文件:
import configparser

config = configparser.ConfigParser()

config['DEFAULT'] = {
    'TEST1': 45,
    'TEST2': 'T2',
}

config['SERVER'] = {}
config['SERVER']['ip'] = '172.16.10.1'
config['SERVER']['port'] = '8888'

config['mysql'] = {}
new_config = config['mysql']
new_config['host'] = '127.0.0.1'
new_config['port'] = '3306'

with open('test14.ini', 'w', encoding='utf-8') as f:
    config.write(f)
获取配置信息:
import configparser

conf = configparser.ConfigParser()
conf.read('test14.ini')
print(conf.sections())

print(conf['mysql']['host'])

9. hashlib模块

10. logging模块

11. re模块

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值