python学习(十三)——模块time、random、os、sys、json、re

一、概念

模块

1、三种类型:

(1)python标准库

(2)第三方模块

(3)自定义模块

2、导入

(1)import:

        1)执行;2)调用

(2)from __ import * (不推荐)

(3)执行对应文件

          __init__.py

调用要到模块,才能用

(1)__name__:名称,路径

(2)if __name = "__main__":   :执行函数

二、模块

1、time

(1)时间戳(1970年1月1日凌晨开始)

# 时间戳  #计算
print(time.time())    #1481321748.481654秒

(2)结构化时间

# 结构化时间---当地时间
print(time.localtime(1531242343))
t=time.localtime()
print(t.tm_year)
print(t.tm_wday)
# -----#结构化时间---UTC
print(time.gmtime())

(3)将结构化时间转换成时间戳

# -----将结构化时间转换成时间戳

print(time.mktime(time.localtime()))
# ------将结构化时间转成字符串时间strftime
print(time.strftime("%Y---%m-%d %X",time.localtime()))
# ------将字符串时间转成结构化时间strptime
print(time.strptime("2016:12:24:17:50:36","%Y:%m:%d:%X"))

print(time.asctime())   # 结构化时间转换
print(time.ctime())     # 时间戳转换

#比较实用
import datetime
print(datetime.datetime.now())

2、random

(1)功能

import random

ret=random.random()         # 0-1的随机数
ret=random.randint(1,3)     # 1-3之间的整数
ret=random.randrange(1,3)   # 1,2
ret=random.choice([11,22,33,44,55])     # 随机选一个
ret=random.sample([11,22,33,44,55],2)   # 随机选两个
ret=random.uniform(1,4)                 # 随机浮点型

print(ret)
ret=[1,2,3,4,5]
random.shuffle(ret)    #打乱顺序
print(ret)

(2)验证码

def v_code():
    ret=""
    for i in range(5):
        num=random.randint(0,9)
        alf=chr(random.randint(65,122))
        s=str(random.choice([num,alf]))
        ret+=s
    return ret
print(v_code())

3、os模块

(1)功能

os.getcwd()     # 当前工作路径
os.chdir("..")  # 改变当前工作目录(..返回上一层)
print(os.getcwd()) 

os.makedirs('dirname1/dirname2')    # 建立文件夹
os.removedirs("dirname1/dirname2")  # 删除文件夹(有内容就不删)
print(os.listdir())                 # 当前目录列表
print(os.stat("sss.py"))            # sss.py的属性信息

print(os.system("dir"))

print(os.path.split(r"C:\Users\Administrator\脱产三期\day22\sss.py")) 
print(os.path.dirname(r"C:\Users\Administrator\脱产三期\day22\sss.py"))
print(os.path.basename(r"C:\Users\Administrator\脱产三期\day22\sss.py"))
a="C:\Users\Administrator"
b="脱产三期\day22\sss.py"

os.path.join(a,b)#  路径拼接



#coding=utf-8

import os   #导入OS模块

os.getcwd()  #得到当前工作目录

os.listdir()  #指定所有目录下所有文件和目录

os.remove()   #删除目录

os.rmdir()    #删除目录

os.mkdir()    #创建目录

os.path.isdir()  #判断指定对象是否为目录

os.path.isfile()  #判断指定对象是否为文件

os.path.exists()  #判断指定对象是否存在

os.path.split()   #返回路径的目录和文件名

os.chdir()   #改变目录到指定目录

os.path.getsize() #获得文件大小,如果为目录,结果为0

os.path.abspath()  #获得绝对路径

os.path.join(path,name)  #连接目录或文件名

os.path.basename(path)  #返回文件名

os.path.dirname(path)  #返回文件路径

4、sys

(1)功能

sys.exit()  # 退出
sys.version # 获取版本
sys.argv    # 命令行参数List,第一个元素是程序本身路径

(2)进度条

import time
for i in range(100):
    sys.stdout.write("#")
    time.sleep(0.1)
    sys.stdout.flush()   # 立即显示

5、json

(1)功能

json.dumps()   # 将数据类型转换为json数据
    dic={'name':'alex'}   #---->{"name":"alex"}----->'{"name":"alex"}'
    i=8                   #---->'8'
    s='hello'             #---->"hello"------>'"hello"'
    l=[11,22]             #---->"[11,22]"

json.load()    # 加载json数据

(2)示例

# 写文件
dic='{"name":"alex"}'
f=open("hello","w")
f.write(dic)

# 读文件
f_read=open("hello","r")
data=f_read.read()
print(type(data))
data=eval(data)
print(data["name"])

#---------------------------------------------------------------------
# json-双引
import json


dic={'name':'alex'}   #---->{"name":"alex"}----->'{"name":"alex"}'
i=8                   #---->'8'
s='hello'             #---->"hello"------>'"hello"'
l=[11,22]             #---->"[11,22]"

f=open("new_hello","w")

dic_str=json.dumps(dic)
f.write(dic_str)    #json.dump(dic,f)

# data = json.load(f)

(3)pickle(不可读)与json几乎一样,只是处理为字节-支持的类型更多,一般json

import pickle

f = open('序列化对象_pickle', 'rb')

data = pickle.loads(f.read())  # 等价于data=pickle.load(f)

print(data['age'])

6、shelve(不常用)

# # -------------------------shelve模块---------
import shelve

f = shelve.open(r'shelve1')  # 目的:将一个字典放入文本 f={}
#
# f['stu1_info']={'name':'alex','age':'18'}
# f['stu2_info']={'name':'alvin','age':'20'}
# f['school_info']={'website':'oldboyedu.com','city':'beijing'}
# f.close()

print(f.get('stu1_info')['age'])

7、xml-出现晚于json

import xml.etree.ElementTree as ET



tree = ET.parse("xml_lesson")
root = tree.getroot()
print(root.tag)


for i in root:

    #print(i.tag)
    #print(i.attrib)
    for j in i:
        #print(j.tag)
        #print(j.attrib)
        print(j.text)




# 遍历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)
# ---------------------------------------

import xml.etree.ElementTree as ET

tree = ET.parse("xml_lesson")
root = tree.getroot()

# 修改
for node in root.iter('year'):
    new_year = int(node.text) + 1
    node.text = str(new_year)
    node.set("updated", "yes")

tree.write("xml_lesson")

# 删除node
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)  # 打印生成的格式

8、re(正则表达式)-操作字符串 -模糊匹配

# ---------------------------功能------------------------------

re.findall('a', 'asdasda')    # 返回所有满足匹配条件的结果,放在列表里

re.search('a', 'asdasda').group()

re.match('a', 'asdasda').group()      # 同search,不过只在字符串开始处匹配

re.split('[ab]', 'absd')      # 先按'a'分割得到''和'bsd'分别按'b'分割
# ['', '', 'sd']

re.sub('\d', 'abc', 'alvinSyuan6', 1)  # 替换字符  (1次)

re.subn('\d', 'abc', 'alvinSyuan6', 1)  # 替换了多少次

com = re.compile("\d+")   
com.findall("asdasdwda45472")

元字符 . ^ $ * + ? {} [] () \

(1)通配符 .

# . 通配符-除了换行(/n)其他都可以匹配
re.findall("asda", "asdfefs")
re.findall("a.d", "asdfefs")    # 一个.代表一个字符

(2)^ -只能在字符串开头匹配

# 必须放在开头
re.findall("^a..a", "asdaasdasdasdasdweqw")

(3)$ -只能在字符串结尾匹配

# 必须放在结尾
re.findall("^a..a$", "asdaasdasdasdasdweqw")

(4)重复- * + ? {}

# * 0到无穷次(可以没有)-贪婪匹配
re.findall("d*", "asdaasdasdasdasdweqw")

# + 1到无穷次(至少有一个) -贪婪匹配
re.findall("asdx+", "asdefxxxxxx")

# ? 0或1次
re.findall("asdxl?", "asdxxxlxxx")

# {} {0,}==* {1,}==+ {0,1}==? {6}重复6次
re.findall("asdx{6}", "asdxxxlxxx")

#------------------------贪婪转惰性--------------------------
# 后面加个?
re.findall("asdx+?", "asdefxxxxxx")  # 惰性匹配,只匹配一次

(5)[] 字符集-只能在字符串结尾匹配

# [] 或;里面没有特殊符号,除了4个- ^ \
re.findall("x[yz*]p", "xypuuuuxzpuuu")

# - 至
re.findall("q[a-z]*", "qweeedfs")

# ^ 非 
re.findall("\([^()]*\)", "12+(34*6+2-5*(2-1))")
# (2-1)

# \ 转义符号
# \d 任何十进制数字
# \D 任何非数字字符
# \s 任何空白字符
# \S 任何非空白字符
# \w 任何字母数字和_
# \W 任何非字母数字_
# \b 特殊字符边界,空格,&,#等

(6)r-python这一层不做任何翻译,只取原生字符(补充,不是元字符)

# r
re.findall(r"I\b", "I am")

(7)| -或

re.findall(r"ka|bc", "qweqka|bcasd") 
# ['ka', 'bc']

(8)() -分组

# 只找第一个,返回对象
re.search("\d+", "sdasd35asdasda78")
# 取出结果
re.search("\d+", "sdasd35asdasda78").group()
# '35'

# 分组命名
re.search("(?P<name>[a-z]+)\(?P<age>\d+)", "abex36asde34asdasd33").group("age")

9、logging

(1)方法

import logging

#------------------basicConfig-----------------------------
logging.basicConfig(
    level = logging.DEBUG,     # 日志级别
    filename = "logger.log",   # 写入文件
    filemode = "w",            # 默认追加,不追加
    # 时间,文件名,行号,信息
    format = "%(asctime)s %(filename)s [%(lineno)] %(message)s"    
)


logging.debug()
logging.info()
logging.warning()
logging.error()
logging.critical()

#-------------------logger-------------------------------多用
logger = logging.getLogger()   # 获取日志

fh = logging.FileHandler("test_log")     # 向文件发送日志
ch = logging.StreamHandler()             # 向屏幕发送日志

fm = logging.Formatter("%(asctime)s %(message)s")

fh.setFormatter(fm)
ch.setFormatter(fm)

logger.addHandler(fh)          
logger.addHandler(ch) 
logger.setLevel("DEBUG")         

logging.debug("q")
logging.info("q")
logging.warning("q")
logging.error("q")
logging.critical("q")

10、configparser -为了配置文件而开发

11、hashlib -用于加密相关的操作

猜你喜欢

转载自blog.csdn.net/qq_28334183/article/details/82886607