python常用模块

  • time
  • random
  • os
  • shutil
  • xml
 
定义:
模块:用来从逻辑上总结Python代码(变量,函数,类,逻辑)     本质是.py结尾的python 文件,实现一个功能
 
导入方法:
import module_name
import module1_name, module2_name, module3_name.....    使用时需要 module_name.xxx   module_name.xxxz()
 
   
from module import *  #导入所有
from module import m1,m2,m3    可以直接使用变量或者函数
 
from module_name import  模块的内置方法 as xxx  #防止和文件内部的函数名称冲突,给导入的函数起一个别名
本质:
导入模块的本质是把python 文件解释一遍。
 
路径搜索:import将模块的路径搜索一遍
 
 
sys.path

包: 本质是一个文件夹(目录),必须带有一个__init.py__文件。
用来从逻辑上组织模块  

 
导入包的本质就是解释包下面的__init.py__文件
 
不在同一目录下的包的导入:
现将包内的文件导入init文件内,然后在导入包即可调用
 
 

导入优化:
多次调用文件内的方法时,可以直接导入文件的方法,避免多次搜索降低效率
from module import m1,m2,m3   
 
 


 

 

  • 标准库(内置模块)
1.time与datetime
格式化的时间字符串表示
时间戳:时间间隔换算成秒  1970年到当前时间之间的秒数  time.time()
元祖(struct_time)共有9个元素  tm_isdst  是否夏令时  tm_wday 一周的第几天  Monday=0
 
 
时间戳转换成元祖的两种形式:
time.获取时间戳
time.gmtime()#结果为utc时区
time.localtime()#结果为本地时间(UTC+8)
 
元祖转换为时间戳:
time.mktime()
 
元祖转换成格式化字符串:
time.strftime(格式,时间元祖struct_time)#得到的结果是所定义格式的时间字符串
 
格式化字符串转换成元祖:
time.strptime(格式化的字符串,格式)#得到元祖  二者需要一一对应
 
 
 
import datetime
 
datetime.datetime.now()打印当前时间
 
 
 
  •  1 __author__ = 'zhangxq'
     2 import time
     3 
     4 time.time()
     5 time.timezone
     6 print(time.gmtime())#当前时间戳转换成元祖,不传变量默认返回本地时间的标准时间UTC(与当前设备时差八个小时)。传参返回的也是UTC
     7 #转换成本地时间
     8 print(time.localtime())#当前时间戳转换成元祖,本地时间
     9 print(time.localtime(122222222))#字符单位是秒,在1970的基础上过了122222222秒
    10 #print(122222222/3600/24/365)
    11 x = time.localtime(12222222)
    12 print(x.tm_year)
    13 #
    14 # print(help(x))
    15 
    16 print(time.mktime(x))#元祖转换为时间戳
    17 #print(1549978929.0/3600/24/365+1970)
    18 print(time.strftime('%Y-%m-%d %H:%M:%S',x))#元祖转换成格式化的字符
    19 print(x)#x仍旧是元祖
    20 #格式化字符串转换成元祖
    21 print(time.strptime('1970-05-22 19:03:42','%Y-%m-%d %H:%M:%S'))#此处返回结果就是元祖x
    22 
    23 print(time.asctime())#转换成固定格式,接收的参数是元祖struct_time
    24 time.ctime()#转换成固定格式,不传参则为本地时间,接收的参数是时间戳 Timestamp
    25 
    26 import datetime
    27 datetime.date
    28 datetime.time
    29 print(datetime.datetime.now())
    30 datetime.datetime.now()+datetime.timedelta(+3)#当前时间+3天,三天后的时间   hours = 3     hours =- 3

     

  • 开源模块(第三方模块)
  • 自定义模块
random模块
 1 __author__ = 'zhangxq'
 2 import random
 3 print(random.random())#随机0-1之间的数
 4 print(random.randint(1,3))#随机1到3的整数
 5 print(random.randrange(1,3))#随机1到2之间的数,不包含3
 6 print(random.choice('hello'))#传入的参数是序列,列表字符串元祖,从序列中随机取值
 7 print(random.sample('hello',2))#前面是序列类型,后面可以对序列取长度(随机取长度范围内的任意元素 )
 8 print(random.uniform(1,3))#指定1到3之间的随机浮点数
 9 
10 a = [1,2,3,4,5,6]
11 random.shuffle(a)#洗牌功能,将列表a中的元素打乱
12 print(a)

 

os模块
 
Linux只要以“/”开头的路径就是绝对路径
windows的绝对路径与分区有关
 1 __author__ = 'zhangxq'
 2 import  os
 3 # print(os.getcwd())#获取当前的操作目录
 4 # #print(os.chdir('c:\\Users'))#切换目录,避免和转义字符之间混淆,将路径的的\修改为\\
 5 # #print(os.chdir(r'C:\Users\Administrator'))#切换目录,避免和转义字符之间混淆,前面加r
 6 # os.curdir #返回当前目录
 7 # os.pardir#返回上一级目录
 8 # os.makedirs(r'c:\a\b\c')#递归的创建出一个系统目录层层创建
 9 # os.removedirs(r'c:\a\b\c')#清除目录,如果目录为空,则递归到上一层,上一层还为空,继续递归。结束条件:文件夹不为空//将当前指定目录全部清除  作用:清除空文件夹
10 # os.mkdir()#创建目录,不能递归创建,只能单层创建
11 # os.rmdir()#清除目录,只清除一层,不能递归清除
12 # os.listdir()#列出目录下包含的所有文件
13 # print(os.listdir(r'd:'))
14 # os.remove(r'c:\a\b\1.txt')#删除文件
15 # os.renames('oldpath','newpathname')#重命名  old,new  #os.rename()
16 #os.stat()#获取文件/目录的信息(属性)
17 #os.sep  #路径分隔符
18 #os.linesep   #换行分隔符 输出当前平台使用的行终止符
19 #os.pathsep   #输出用于分割当前文件路径的字符串
20 #os.environ  #查看当前系统的环境变量
21 # os.name  #当前系统名  ‘nt’代表windows
22 # os.system('')#执行命令 dir   ipconfig /all
23 # os.path.abspath()#获取某个文件的绝对路径
24 
25 #不考虑路径是否真实存在
26 # os.path.split(r'c:\a\b\1.txt')#分割,  此处将文件分隔成两部分,(文件所在的目录,文件名),返回二元组的形式
27 os.path.dirname(r'c:\a\b\1.txt')#取目录
28 os.path.basename(r'c:\a\b\1.txt')#取路径最里层(1.txt)  os.path.basename(r'c:\a\b')#取路径最里层(b)
29 os.path.exists()#判断输入的路径是否存在
30 os.path.isabs()#判断是否是绝对路径
31 os.path.isfile()#判断是否是文件
32 os.path.join(r'c:',r'\a',r'\b',r'\1.txt')#组合返回,第一个绝对路径之前的的参数将被忽略
33 os.path.getatime()#获取最后存储时间
34 os.path.getmtime()#获取修改存储时间

 

 
shutil模块
高级的文件,文件夹,压缩包处理模块
 1 __author__ = 'zhangxq'
 2 import shutil
 3 #shutil对压缩包的处理实质上是调用zipfile和tarfile两个模块来进行的
 4 
 5 #import pickle
 6 import json
 7 # info = {
 8 #     'title':'shuitl_test',
 9 #      'name':'张xq',
10 #      'age':24,
11 #      'job':'IT'
12 # }
13 # # a = print(sorted(info.items()))#给字典排序
14 # f1 = open('f1_test','w',encoding='utf-8')#,encoding='utf-8')
15 # #sorted(info.items(),key=lambda x:x[1])
16 # f1.write(json.dumps(info))
17 # f1.close()
18 #
19 #
20 # f2 = open('f1_test',encoding='utf-8')
21 # f3 = open('f2_test','w',encoding='utf-8')
22 #
23 # shutil.copyfileobj(f2,f3)#copy文件 ,不需要定义f3, shutil.copyfile('f1_test','f3_test'),直接进行文件之间的copy
24 
25 # shutil.copymode() #仅拷贝权限,用户,组,内容均不变
26 # shutil.copystat()#拷贝状态的信息(所有信息)???权限
27 # shutil.copy()#拷贝文件和权限
28 # shutil.copy2()#同时拷贝文件和状态信息
29 # shutil.copytree('time_test','time_newtest')#递归的拷贝文件
30 # shutil.rmtree()#递归的删除文件
31 # shutil.move()#递归的移动文件
32 
33 #shutil.make_archive(base_name,format,...)#创建压缩包并返回文件路径  如:zip,tar
34 
35 #base_name:压缩包的文件名,也可以是压缩包的路径,只是文件名时,则保存在当前目录,否则保存在指定路径
36 #format:压缩包种类 'zip'  'tar' 'bztar' 'gztar'
37 #root_dir:要压缩的文件路径
38 #owner:用户,默认的当前用户
39 #group:组:默认当前组
40 #logger:用来记录日志,通常使用logging.logger对象
41 
42 
43 #压缩的单个文件
44 import  zipfile
45 z = zipfile.ZipFile('day5.zip','w')
46 z.write('random_test.py')
47 print('----------')
48 z.write('f1_test')
49 #解压
50 z = zipfile.ZipFile('day5.zip','m')
51 z.extractall()#解压
52 z.close()
53 
54 
55 
56 
57 
58 
59 
60 ``

 



xml处理模块
实现不同语言或程序之间进行数据交换的协议。
xml的格式如下,就是通过<>节点来区别数据结构的:
 
 1 __author__ = 'zhangxq'
 2 #Python处理xml文件
 3 #
 4 import xml.etree.ElementTree as ET
 5 
 6 
 7 import xml.etree.ElementTree as ET
 8 #xml文件的读取
 9 tree = ET.parse("xml_test.xml")
10 root = tree.getroot()
11 #print(root) 内存地址
12 print(root.tag)
13 #遍历xml文档
14 for child in root:#遍历整个xml文档
15     print(child.tag, child.attrib)#child.tag ==country   child.attrib ==country 里面的属性
16     for i in child:  #循环标签里面的属性
17         print(i.tag,i.text,i.attrib)
18 #只遍历year 节点
19 for node in root.iter('year'):
20     print(node.tag,node.text)
 1 __author__ = 'zhangxq'
 2 import xml.etree.ElementTree as ET
 3 tree = ET.parse("xmltest.xml")
 4 root = tree.getroot()#获取到文件
 5 #修改
 6 for node in root.iter('year'):
 7     new_year = int(node.text) + 1#text获取文本
 8     node.text = str(new_year)
 9     node.set("updated","yes")#给year添加属性
10 tree.write("xmltest.xml")#写回原文件
11 #删除node
12 for country in root.findall('country'):#可以将所有的country都find出来
13    rank = int(country.find('rank').text)
14    if rank > 50:
15      root.remove(country)
16 
17 tree.write('output.xml')
 1 __author__ = 'zhangxq'
 2 import xml.etree.ElementTree as ET
 3 new_xml = ET.Element("namelist")
 4 personinfo= ET.SubElement(new_xml,"personinfo",attrib={"enrolled":"yes"})
 5 age = ET.SubElement(personinfo,"age",attrib={"checked":"no"})
 6 name = ET.SubElement(personinfo,"name")
 7 name.text = 'zhang'
 8 sex = ET.SubElement(personinfo,"sex")
 9 sex.text =''
10 age.text = '33'
11 personinfo2 = ET.SubElement(new_xml,"personinfo2",attrib={"enrolled":"no"})
12 name2 = ET.SubElement(personinfo2,"name2")
13 name2.text = 'lixiaolong'
14 age = ET.SubElement(personinfo2,"age")
15 age.text = '19'
16 et = ET.ElementTree(new_xml) #生成文档对象
17 et.write("test.xml", encoding="utf-8",xml_declaration=True)
18 ET.dump(new_xml) #打印生成的格式

所生成的xml文件格式表现如下:

 1 <?xml version='1.0' encoding='utf-8'?>
 2 <namelist>
 3     <personinfo enrolled="yes">
 4         <age checked="no">33</age>
 5         <name>zhang</name>
 6         <sex></sex>
 7     </personinfo>
 8     <personinfo2 enrolled="no">
 9         <name2>lixiaolong</name2>
10         <age>19</age>
11     </personinfo2>
12 </namelist>

 

 
 
 
 
re模块
正则表达式:用来匹配字符串
 1 __author__ = 'zhangxq'
 2 import re
 3 res1 = re.match('^Z.+','Zhang')
 4 res2 = re.match('Z.+a','Zhang123Xiao144Qing666')#匹配到最后一个a
 5 res2s = re.match('Z.+a$','Zhang123Xiao144Qing666')#$用来验证字符串的最后一个字符是否是a
 6 res3 = re.match('Zhang\d','Zhang123Xiao144Qing666')#
 7 res4 = re.match('Zhang\d+','Zhang123Xiao144Qing666')#
 8 print(res2s)
 9 re.search('aal?','aal123qwer11aa')#匹配前一个字符1次或0次,(此处匹配aal的前两个字符或所有)
10 res5 = re.search('[0-9]{2}','aal123qwer11aa')#匹配前一个字符m次
11 res5 = re.search('[0-9]{1,3}','6aal123qwer11aa')#匹配前一个字符m次
12 print(res5)
13 print(re.findall("[0-9]{1,3}","aal123qwer11aa"))# 把所有匹配到的字符放到以列表中的元素返回
14 print(re.search('abc|ABC','6abcABCaal123qwer11aa').group())#返回abc
15 print(re.search('abc|ABC','6ABCabcABCaal123qwer11aa').group())#返回ABC
16 print(re.findall('abc|ABC','6abcABCaal123qwer11aa'))
17 
18 print(re.search("(?P<id>[a-z]{3})(?P<paassord>[0-9]{2})","aacb111zhang1234").groupdict("id"))#生成字典
19 
20 print(re.split('[0-9]','abc12def1gH4i'))#分割
21 print(re.split('[0-9]+','abc12def1gH4i'))#分割
22 print(re.search("(?P<province>[0-9]{4})(?P<city>[0-9]{2})(?P<birthday>[0-9]{4})","371481199306143242").groupdict("city"))
23 
24 替换sub
25 print(re.sub("[0-9]","6","111zhang222xiao333qing",count=2))#将0-9范围内的数字替换成6,count设置替换的个数
26 
27 
28 print(re.search("[a-z].+","abcdeFG",flags=re.I))#flags=re.I  匹配时忽略大小写
29 print(re.search("[a-z]+","abcdeFG1234",flags=re.I))#flags=re.I  匹配时忽略大小写  与上面输出结果相同
30 
31 print(re.search(r'^a','aaZhang'))
32 print(re.search(r'^a','\naaZhang',flags=re.M))#当需要匹配的字符串前面有转义字符时,不能正确匹配。此时使用flags=re.M(即flags=re.MULTILINE)
33 print(re.search(r'.+','\naaZhang',flags=re.S))#点任意匹配模式,改变'.'的行为,可以匹配\n
34 class Role:
35     def __init__()#实例化类,进行传参使用__init__()方法  构造函数,在实例化时做一些类的初始化的工作

 

 
posted @ 2019-02-28 13:09  菠菜猫  阅读(206)  评论(0编辑  收藏  举报