精华内容
下载资源
问答
  • Python常用标准库

    千次阅读 2019-06-10 23:02:18
    常用标准库: os操作系统, time时间, random随机, pymysql连接数据库, threading线程,multiprocessing进程,queue队列。 第三方库: django和flask也是第三方库,requests,virtualenv,selenium,scrapy,...

    常用标准库:
    os操作系统, time时间, random随机, pymysql连接数据库, threading线程,multiprocessing进程,queue队列。

    第三方库:
    django和flask也是第三方库,requests,virtualenv,selenium,scrapy,xadmin,celery,
    re,hashlib,md5。

    常用的科学计算库:
    Numpy,Scipy,Pandas等

    展开全文
  • python常用标准库总结

    千次阅读 多人点赞 2021-01-22 16:46:20
    sys 1.识别操作系统 import sys print(sys.pltfrom)

    争取写完,持续更新

    文章目录

    一.sys

    1.platfrom方法识别操作系统
    import sys
    
    print(sys.platform)
    
    

    win32

    2.argv方法获取命令行参数
    import sys
    
    print(sys.argv)
    
    

    [‘D:/Code/python/Draft/1.py’]

    3.exit方法退出程序
    import sys
    
    for i in range(5):
        print(i)
        if i > 2:
            sys.exit(1)
    
    
    

    0
    1
    2
    3

    4.path方法获取模块搜索路径
    import sys
    
    for path in sys.path:
        print(path)
    

    D:\Develop\python
    C:\Users\yh\AppData\Roaming\Python\Python39\site-packages
    D:\Develop\python\lib\site-packages
    D:\Develop\python\lib\site-packages\django-3.0.11-py3.9.egg
    D:\Develop\python\lib\site-packages\asgiref-3.3.1-py3.9.egg
    D:\Develop\python\lib\site-packages\pip-20.3.3-py3.9.egg
    D:\App\PyCharm 2020.3.2\plugins\python\helpers\pycharm_matplotlib_backend

    5.modules方法查找已导入的模块
    import sys
    
    print(sys.modules.keys())
    

    D:\Develop\python\python.exe D:/Code/python/Draft/1.py
    dict_keys([‘sys’, ‘builtins’, ‘_frozen_importlib’, ‘_imp’, ‘_thread’, ‘_warnings’, ‘_weakref’, ‘_frozen_importlib_external’, ‘nt’, ‘_io’, ‘marshal’, ‘winreg’, ‘time’, ‘zipimport’, ‘_codecs’, ‘codecs’, ‘encodings.aliases’, ‘encodings’, ‘encodings.utf_8’, ‘_signal’, ‘encodings.latin_1’, ‘_abc’, ‘abc’, ‘io’, ‘main’, ‘_stat’, ‘stat’, ‘_collections_abc’, ‘genericpath’, ‘ntpath’, ‘os.path’, ‘os’, ‘_sitebuiltins’, ‘_locale’, ‘_bootlocale’, ‘_codecs_cn’, ‘_multibytecodec’, ‘encodings.gbk’, ‘_heapq’, ‘heapq’, ‘itertools’, ‘keyword’, ‘_operator’, ‘operator’, ‘reprlib’, ‘_collections’, ‘collections’, ‘types’, ‘_functools’, ‘functools’, ‘enum’, ‘_sre’, ‘sre_constants’, ‘sre_parse’, ‘sre_compile’, ‘copyreg’, ‘re’, ‘token’, ‘tokenize’, ‘linecache’, ‘traceback’, ‘sitecustomize’, ‘site’])

    Process finished with exit code 0

    二.os

    1.dirname方法获取当前路径
    import os
    
    print(os.path.dirname(__file__))
    

    D:\Code\python\Draft

    2.getcwd方法获取当前路径,chdir方法切换路径
    import os
    
    print(os.getcwd())
    os.chdir("D:\\")
    print(os.getcwd())
    

    D:\Code\python\Draft
    D:\

    3.rename方法可以重命名文件
    import os
    
    os.rename("a.txt", "b.txt")
    
    
    4.exits方法可以查看文件是否存在
    import os
    
    print(os.path.exists('a.txt'))
    
    

    False

    5.isfile方法判断是否是一个文件
    import os
    
    print(os.path.isfile('b.txt'))
    
    

    True

    6.isdir方法判断路径是否是一个目录
    import os
    
    print(os.path.isdir("c:\\"))
    
    

    True

    7.environ方法获取系统变量
    import os
    
    for k, v in os.environ.items():
        print(k, "=>", v)
    
    

    ALLUSERSPROFILE => C:\ProgramData
    APPDATA => C:\Users\yh\AppData\Roaming
    COMMONPROGRAMFILES => C:\Program Files\Common Files
    COMMONPROGRAMFILES(X86) => C:\Program Files (x86)\Common Files
    COMMONPROGRAMW6432 => C:\Program Files\Common Files
    COMPUTERNAME => LAPTOP-J8VS29QD
    COMSPEC => C:\WINDOWS\system32\cmd.exe
    DRIVERDATA => C:\Windows\System32\Drivers\DriverData
    FPS_BROWSER_APP_PROFILE_STRING => Internet Explorer
    FPS_BROWSER_USER_PROFILE_STRING => Default
    HOMEDRIVE => C:
    HOMEPATH => \Users\yh
    IDEA_INITIAL_DIRECTORY => C:\Users\yh\Desktop
    LOCALAPPDATA => C:\Users\yh\AppData\Local
    LOGONSERVER => \LAPTOP-J8VS29QD
    NUMBER_OF_PROCESSORS => 12
    ONEDRIVE => C:\Users\yh\OneDrive
    ONEDRIVECONSUMER => C:\Users\yh\OneDrive
    OS => Windows_NT
    PATH => D:\App\VMware\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0;C:\Windows\System32\OpenSSH;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\NVIDIA Corporation\NVIDIA NvDLISR;C:\Program Files (x86)\Intel\Intel® Management Engine Components\DAL;C:\Program Files\Intel\Intel® Management Engine Components\DAL;C:\Program Files\Intel\WiFi\bin;C:\Program Files\Common Files\Intel\WirelessCommon;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0;C:\WINDOWS\System32\OpenSSH;D:\App\Git\cmd;D:\App\Xshell;D:\App\Node;D:\Develop\jdk\bin;D:\Develop\mingw64\bin;D:\Develop\python\Lib\site-packages\Django-3.0.11-py3.9.egg\django;D:\Develop\python\Scripts;D:\Develop\python\Scripts;D:\Develop\python;C:\Users\yh\AppData\Local\Microsoft\WindowsApps;;D:\App\Microsoft VS Code\bin;C:\Users\yh\AppData\Roaming\npm;D:\App\PyCharm 2020.3.2\bin;
    PATHEXT => .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC
    PROCESSOR_ARCHITECTURE => AMD64
    PROCESSOR_IDENTIFIER => Intel64 Family 6 Model 158 Stepping 13, GenuineIntel
    PROCESSOR_LEVEL => 6
    PROCESSOR_REVISION => 9e0d
    PROGRAMDATA => C:\ProgramData
    PROGRAMFILES => C:\Program Files
    PROGRAMFILES(X86) => C:\Program Files (x86)
    PROGRAMW6432 => C:\Program Files
    PSMODULEPATH => C:\Program Files\WindowsPowerShell\Modules;C:\WINDOWS\system32\WindowsPowerShell\v1.0\Modules
    PUBLIC => C:\Users\Public
    PYCHARM => D:\App\PyCharm 2020.3.2\bin;
    PYCHARM_DISPLAY_PORT => 63342
    PYCHARM_HOSTED => 1
    PYTHONIOENCODING => UTF-8
    PYTHONPATH => D:\Code\python;D:\Code\python\Stdent;D:\App\PyCharm 2020.3.2\plugins\python\helpers\pycharm_matplotlib_backend;D:\App\PyCharm 2020.3.2\plugins\python\helpers\pycharm_display
    PYTHONUNBUFFERED => 1
    SESSIONNAME => Console
    SYSTEMDRIVE => C:
    SYSTEMROOT => C:\WINDOWS
    TEMP => C:\Users\yh\AppData\Local\Temp
    TMP => C:\Users\yh\AppData\Local\Temp
    USERDOMAIN => LAPTOP-J8VS29QD
    USERDOMAIN_ROAMINGPROFILE => LAPTOP-J8VS29QD
    USERNAME => yh
    USERPROFILE => C:\Users\yh
    WINDIR => C:\WINDOWS

    8.mkdir方法创建单层目录
    9.mkdirs方法创建多层目录

    三.math

    1.常量圆周率和自然常数e
    import math
    
    print(math.pi)
    print(math.e)
    

    3.141592653589793
    2.718281828459045

    2.ceil函数向上取整,floor函数向下取整
    import math
    
    print(math.ceil(math.pi))
    print(math.floor(math.pi))
    

    4
    3

    3.pow函数为指数运算
    import math
    
    print(math.pow(2, 3))
    

    8.0

    4.log函数为对数运算,默认底数为e,第二个参数可以设置底数
    import math
    
    print(math.log(3))
    print(math.log(100, 10))
    
    

    1.0986122886681098
    2.0

    5.sqrt函数为平方根计算
    import math
    
    print(math.sqrt(4))
    

    2.0

    6.三角函数计算
    import math
    
    print(math.sin(1))
    print(math.cos(math.pi))
    
    

    0.8414709848078965
    -1.0

    7.角度与弧度转化
    import math
    
    print(math.degrees(math.pi))
    print(math.radians(90))
    

    180.0
    1.5707963267948966

    四.random

    1.random方法用于产生0到1之间的随机浮点数
    import random
    
    print(random.random())
    

    0.6666132029039157

    2.randint方法产生指定区间的随机数
    import random
    
    print(random.randint(1, 100))
    

    58

    3.choice方法获取序列中的一个随机数
    import random
    
    a = (1, 5, 8, 9, 6, 7, 4)
    print(random.choice(a))
    
    

    1

    4.shuffle方法将序列打乱
    import random
    
    a = [1, 5, 8, 9, 6, 7, 4]
    random.shuffle(a)
    print(a)
    
    

    [7, 1, 9, 6, 4, 5, 8]

    五.time

    1.time函数用于返回当前的时间戳(格林尼治时间起至现在的总秒数)
    import time
    
    now = time.time()
    print(now)
    
    

    1611303060.773287

    2.localtime函数用于将时间戳格式转化为本地时间,返回(struct_time)对象
    import time
    
    now = time.localtime()
    print(now)
    
    

    time.struct_time(tm_year=2021, tm_mon=1, tm_mday=22, tm_hour=16, tm_min=14, tm_sec=30, tm_wday=4, tm_yday=22, tm_isdst=0)

    3.mktime函数接收struct_time返回用秒数表示时间的浮点数
    import time
    
    now = time.localtime()
    print(now)
    s = time.mktime(now)
    print(s)
    
    

    time.struct_time(tm_year=2021, tm_mon=1, tm_mday=22, tm_hour=16, tm_min=21, tm_sec=1, tm_wday=4, tm_yday=22, tm_isdst=0)
    1611303661.0

    4.gmtime函数可以将时间戳转化为0时区的struct_time
    import time
    
    now = time.time()
    print(now)
    s = time.gmtime(now)
    print(s)
    
    

    1611303823.960081
    time.struct_time(tm_year=2021, tm_mon=1, tm_mday=22, tm_hour=8, tm_min=23, tm_sec=43, tm_wday=4, tm_yday=22, tm_isdst=0)

    5.asctime函数可以接收struct_time返回可读的时间形式
    import time
    
    now = time.time()
    print(now)
    s = time.gmtime(now)
    print(s)
    new = time.asctime(s)
    print(new)
    
    

    1611303959.5288363
    time.struct_time(tm_year=2021, tm_mon=1, tm_mday=22, tm_hour=8, tm_min=25, tm_sec=59, tm_wday=4, tm_yday=22, tm_isdst=0)
    Fri Jan 22 08:25:59 2021

    6.ctime函数可以把时间戳转化为可读形式
    import time
    
    now = time.time()
    print(now)
    s = time.ctime(now)
    print(s)
    
    

    1611304057.0304146
    Fri Jan 22 16:27:37 2021

    7.sleep函数推迟调用线程的运行,参数为秒
    import time
    
    print("start:", time.ctime())
    time.sleep(9)
    print("end:", time.ctime())
    
    

    start: Fri Jan 22 16:29:58 2021
    end: Fri Jan 22 16:30:07 2021

    8.strftime函数接收时间元组,返回可读的当地时间
    9.strptime函数可以将时间字符解析为时间元组

    六.datetime

    1.date对象
    import datetime
    
    print(datetime.MAXYEAR)  # 支持的最大年份
    print(datetime.MINYEAR)  # 支持的最小年份
    print(datetime.date.today())  # today返回当天日期
    print(datetime.date.today().weekday())  # weekday放回当天的星期
    print(datetime.date.today().isoformat())  # 返回IOS格式
    
    

    9999
    1
    2021-01-22
    4
    2021-01-22

    2.time对象
    import datetime
    
    print(datetime.time())  # 默认时间
    print(datetime.time.max)  # 支持的最大时间
    print(datetime.time.min)  # 支持的最小时间
    
    
    

    00:00:00
    23:59:59.999999
    00:00:00

    3.datetime对象

    datetime=date+time,同时返回日期和时间

    import datetime
    
    today = datetime.datetime.today()
    print(today)
    print(datetime.datetime.now())  # 与today用法相同
    print(datetime.datetime.utcnow())  # 0时区时间
    now = datetime.datetime.now()
    print(now.date())  # date对象返回日期
    print(now.time())  # time对象返回时间
    
    

    2021-01-22 18:22:42.380595
    2021-01-22 18:22:42.382589
    2021-01-22 10:22:42.382589
    2021-01-22
    18:22:42.382589

    4.timedelta对象

    表示时间差

    import datetime
    
    dt1 = datetime.datetime.now()
    dt2 = datetime.timedelta(weeks=2) + dt1
    print(dt1)
    print(dt2)
    print(dt1 - dt2)
    
    

    2021-01-22 18:34:31.429461
    2021-02-05 18:34:31.429461
    -14 days, 0:00:00

    5.tzinfo对象

    七.calendar

    1.calendar.isleap用于判断闰年
    import calendar
    
    print(calendar.isleap(2000))
    print(calendar.isleap(2018))
    
    

    True
    False

    2.canlender.leapdays用于返回两个年份之间闰年的总数
    import calendar
    
    print(calendar.leapdays(1900,2000))
    
    

    24

    3.canlender.month方法用于制作日历

    四个参数:theyear,themonth,w(字符间距),l(行间距)

    import calendar
    
    print(calendar.month(2021,1))
    
    

    在这里插入图片描述

    4.calendar.monthcalender方法返回一个单层嵌套列表,每个列表里面装载一个星期
    import calendar
    
    print(calendar.monthcalendar(2021,1))
    
    

    [[0, 0, 0, 0, 1, 2, 3], [4, 5, 6, 7, 8, 9, 10], [11, 12, 13, 14, 15, 16, 17], [18, 19, 20, 21, 22, 23, 24], [25, 26, 27, 28, 29, 30, 31]]

    5.calendar.monthrange方法返回两个整数组成的元组,第一个数表示该月的第一天是星期几,第二个数表示改月的天数
    import calendar
    
    print(calendar.monthrange(2021,1))
    
    

    (4, 31)

    6.calendar.weekday方法返回给定日期的星期码
    import calendar 
    
    print(calendar.weekday(2021,1,1))
    
    

    4

    7.calendar.calendar返回整年月历
    import calendar 
    
    print(calendar.calendar(2021))
    
    

    在这里插入图片描述

    八.smtplib+email

    1.smtp.sendmail(sender,recever,message.as_string())方法用于发送邮件,参数分别为邮件发送者地址,接收者地址,发送方式(一般使用字符串)
    2.Header方法用于构造message对象
    3.MIMEText用于构造邮件内容
    4.smtp.login(sender,password)方法用登录
    from email import message
    from email import header
    import smtplib
    from email.mime.text import MIMEText
    from email.header import Header
    
    sender = "10791894@qq.com"
    password = "邮箱授权码"
    recever = ["10791894@qq.com", ]
    message = MIMEText("邮件内容", "plain", "utf-8")
    message["From"] = Header("发件人显示的名字", "utf-8")
    message["To"] = Header("yh", "utf-8")
    message["Subject"] = "text"
    try:
        smtp = smtplib.SMTP_SSL("smtp.qq.com")
        smtp.login(sender, password)
        smtp.sendmail(sender, recever, message.as_string())
        print("邮件已经发送")
    except smtplib.SMTPException as e:
        print("出错", e)
    
    
    

    邮件已经发送
    在这里插入图片描述

    5.MIMEText的第二个参数改成"html"可以发送html格式的电子邮件
    from email import message
    from email import header
    import smtplib
    from email.mime.text import MIMEText
    from email.header import Header
    
    sender = "10791894@qq.com"
    password = "邮箱授权码"
    recever = ["10791894@qq.com", ]
    mail_html = """
    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="utf-8" />
    		<title></title>
    	</head>
    	<body>
    		<a href="http://www.baidu.com">百度一下</a>
    	</body>
    </html>
    
    """
    message = MIMEText(mail_html, "html", "utf-8")
    message["From"] = Header("发件人显示的名字", "utf-8")
    message["To"] = Header("yh", "utf-8")
    message["Subject"] = "text"
    try:
        smtp = smtplib.SMTP_SSL("smtp.qq.com")
        smtp.login(sender, password)
        smtp.sendmail(sender, recever, message.as_string())
        print("邮件已经发送")
    except smtplib.SMTPException as e:
        print("出错", e)
    
    
    """
    message=MIMEText(mail_html,"html","utf-8")
    message["From"]=Header("发件人显示的名字","utf-8")
    message["To"]=Header("yh","utf-8")
    message["Subject"]="text"
    try:
        smtp=smtplib.SMTP_SSL("smtp.qq.com")
        smtp.login(sender,password)
        smtp.sendmail(sender,recever,message.as_string())
        print("邮件已经发送")
    except smtplib.SMTPException as e:
        print("出错",e)
        
    

    邮件已经发送在这里插入图片描述

    6.MIMEMultipart对象,attach方法可以添加附件
    from email import message
    from email import header
    import smtplib
    from email.mime.text import MIMEText
    from email.header import Header
    from email.mime.multipart import MIMEMultipart
    
    sender = "10791894@qq.com"
    password = "邮箱授权码"
    recever = ["10791894@qq.com", ]
    mail_html = """
    <!DOCTYPE html>
    <html>
    	<head>
    		<meta charset="utf-8" />
    		<title></title>
    	</head>
    	<body>
    		<a href="http://www.baidu.com">百度一下</a>
    	</body>
    </html>
    
    """
    message = MIMEMultipart()  # 指定消息使用复合型
    message["From"] = Header("发件人显示的名字", "utf-8")
    message["To"] = Header("yh", "utf-8")
    message["Subject"] = "text"
    f = open("test.txt", "w", encoding="utf-8")
    f.write("test")
    f.close()
    message.attach(MIMEText(mail_html, "html", "utf-8"))
    attach_file = MIMEText(open("test.txt", encoding="utf-8").read(), "base64", "utf-8")
    attach_file["Content-Disposition"] = 'attachment;filename="mail.py"'
    message.attach(attach_file)
    try:
        smtp = smtplib.SMTP_SSL("smtp.qq.com")
        smtp.login(sender, password)
        smtp.sendmail(sender, recever, message.as_string())
        print("邮件已经发送")
    except smtplib.SMTPException as e:
        print("出错", e)
    
    

    邮件已经发送
    在这里插入图片描述

    九.IO

    1.StringIO对象可以直接写入文件,操作对象为str
    2.BytesIO对象实现在内存中读取Bytes

    十.re

    1.compile函数用于生成正则对象
    import re
    
    pattern = re.compile(r'\w+')  # 可以用pattern对象进行正则匹配
    
    
    2.match函数用于查找字符串指定位置
    import re
    
    pattern = re.compile(r'\d+')  # 可以用pattern对象进行正则匹配
    m1 = pattern.match('noe123')
    print(m1)  # 返回none
    m2 = pattern.match('one123', 3, 6)  # 匹配从位置3到位置6的字符
    print(m2)  # 返回match对象
    print(m2.group())
    
    

    None
    <re.Match object; span=(3, 6), match=‘123’>
    123

    3.search函数用于查找字符串指定位置,相比match方法,search函数只需字符串包含匹配正则匹配的子串就认为匹配
    import re
    
    pattern = re.compile(r'\d+')  # 可以用pattern对象进行正则匹配
    m1 = pattern.search('noe123')
    print(m1)  # 返回对象
    print(m1.group())
    
    

    <re.Match object; span=(3, 6), match=‘123’>
    123

    4.findall方法是完全匹配,match和search是一次匹配,只有找到一个结果就返回
    import re
    
    pattern = re.compile(r'\d{2}')  # 可以用pattern对象进行正则匹配
    m1 = pattern.findall('noe1235556')
    print(m1)  # 返回none
    
    
    

    [‘12’, ‘35’, ‘55’]

    5.spilt方法可以用正则表达式规则分割字符串
    import re
    
    pattern = re.compile(r'\d{2}')  # 可以用pattern对象进行正则匹配
    m1 = pattern.split('noe1235556')
    print(m1)  # 返回none
    
    

    [‘noe’, ‘’, ‘’, ‘6’]

    6.sub方法可以用正则表达式规则替换字符串
    import re
    
    pattern = re.compile(r'\d{2}')  # 可以用pattern对象进行正则匹配
    m1 = pattern.sub('99', 'noe1235556')
    print(m1)  # 返回none
    
    

    noe9999996

    十一.requests

    这里使用请求测试接口http://httpbin.org/get

    1.get
    import requests
    
    r = requests.get('http://httpbin.org/get')
    print(r.text)
    

    {
    “args”: {},
    “headers”: {
    “Accept”: “/”,
    “Accept-Encoding”: “gzip, deflate”,
    “Host”: “httpbin.org”,
    “User-Agent”: “python-requests/2.25.1”,
    “X-Amzn-Trace-Id”: “Root=***********”
    },
    “origin”: “**********”,
    “url”: “http://httpbin.org/get”
    }

    2.post
    import requests
    
    r = requests.post('http://httpbin.org/post', data={'key': 'value'})
    print(r.text)
    

    {
    “args”: {},
    “data”: “”,
    “files”: {},
    “form”: {
    “key”: “value”
    },
    “headers”: {
    “Accept”: “/”,
    “Accept-Encoding”: “gzip, deflate”,
    “Content-Length”: “9”,
    “Content-Type”: “application/x-www-form-urlencoded”,
    “Host”: “httpbin.org”,
    “User-Agent”: “python-requests/2.25.1”,
    “X-Amzn-Trace-Id”: “Root=******”
    },
    “json”: null,
    “origin”: “***************”,
    “url”: “http://httpbin.org/post”
    }

    十二.pickle

    1.pickle.dumps方法可以把对象序列化成bytes
    import pickle
    
    
    class Student:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
    
    student1 = Student('YH', 18)
    print(pickle.dumps(student1))
    
    

    序列化结果:

    b’\x80\x04\x954\x00\x00\x00\x00\x00\x00\x00\x8c\x08__main__\x94\x8c\x07Student\x94\x93\x94)\x81\x94}\x94(\x8c\x04name\x94\x8c\x02YH\x94\x8c\x03age\x94K\x12ub.’

    2.pickle.dump方法可以把对象序列化,然后直接写入文件中。
    import pickle
    
    
    class Student:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
    
    student1 = Student('YH', 18)
    print(pickle.dumps(student1))
    with open('test.data', 'wb') as f:
        pickle.dump(student1, f)
    
    

    写入结果
    在这里插入图片描述
    是一个二进制文件,文本框打开会乱码

    ��4

    这时候就已经把序列化的内容保存到文件中了。

    3.pickle.loads方法将序列化内容反序列化
    import pickle
    
    
    class Student:
        def __init__(self, name, age):
            self.name = name
            self.age = age
    
    
    # student1=Student('YH',18)
    # print(pickle.dumps(student1))
    # with open('test.data','wb') as f:
    #     pickle.dump(student1,f)
    f = open('test.data', 'rb')
    data = f.read()  # 这里的data仍然是序列化内容
    student1 = pickle.loads(data)
    f.close()
    print(student1.name, student1.age)
    
    

    运行结果
    在这里插入图片描述
    从这里看出文件中的序列化内容已经被正确读取。

    4.注意

    pickle的序列化和反序列化操作只能用于python而不能被其他语言读取,并且不同版本的python之间也可能存在兼容性问题。

    十三.hashlib

    1.md5加密
    import hashlib
    
    
    def md5(content):
        return hashlib.md5(content.encode()).hexdigest()
    
    
    message = '东北大学'
    print('一次加密:', md5(message))
    print('二次加密:', md5(md5(message)))
    
    

    一次加密: 5cd4f88d13c3119a7fe6171be680cc74
    二次加密: 25ed8c88d5f7e5739747a86c8ce22011

    2.SHA加密
    import hashlib
    
    
    def sha_(content):
        return hashlib.sha1(content.encode()).hexdigest()
    
    
    message = '东北大学'
    print('一次加密:', sha_(message))
    print('二次加密:', sha_(sha_(message)))
    
    

    一次加密: b44c0e7b65c87666fadc6428545dc0dc5d2ac237
    二次加密: 79beea275a499f259d6f69d5d2f37301977d1d26

    展开全文
  • python常用标准库汇总

    千次阅读 2020-10-20 13:56:49
    文本 string:通用字符串操作 re:正则表达式操作 difflib:差异计算工具 textwrap:文本填充 unicodedata:Unicode字符数据库 stringprep:互联网字符串准备工具 readline:GNU按行读取接口 ...collections:

    文本

    string:通用字符串操作

    re:正则表达式操作

    difflib:差异计算工具

    textwrap:文本填充

    unicodedata:Unicode字符数据库

    stringprep:互联网字符串准备工具

    readline:GNU按行读取接口

    rlcompleter:GNU按行读取的实现函数

    struct:将字节解析为打包的二进制数据

    codecs:注册表与基类的编解码器

    数据类型

    datetime:基于日期与时间工具

    calendar:通用月份函数

    collections:容器数据类型

    collections.abc:容器虚基类

    heapq:堆队列算法

    bisect:数组二分算法

    array:高效数值数组

    weakref:弱引用

    types:内置类型的动态创建与命名

    copy:浅拷贝与深拷贝

    pprint:格式化输出

    reprlib:交替repr()的实现

    数学

    numbers:数值的虚基类

    math:数学函数

    cmath:复数的数学函数

    decimal:定点数与浮点数计算

    fractions:有理数

    random:生成伪随机数

    函数式编程

    itertools:为高效循环生成迭代器

    functools:可调用对象上的高阶函数与操作

    operator:针对函数的标准操作

    文件与目录

    os.path:通用路径名控制

    fileinput:从多输入流中遍历行

    stat:解释stat()的结果

    filecmp:文件与目录的比较函数

    tempfile:生成临时文件与目录

    glob:Unix风格路径名格式的扩展

    fnmatch:Unix风格路径名格式的比对

    linecache:文本行的随机存储

    shutil:高级文件操作

    macpath:MacOS 9路径控制函数

    持久化

    pickle:Python对象序列化

    copyreg:注册机对pickle的支持函数

    shelve:Python对象持久化

    marshal:内部Python对象序列化

    dbm:Unix“数据库”接口

    sqlite3:针对SQLite数据库的API2.0

    压缩

    zlib:兼容gzip的压缩

    gzip:对gzip文件的支持

    bz2:对bzip2压缩的支持

    lzma:使用LZMA算法的压缩

    zipfile:操作ZIP存档

    tarfile:读写tar存档文件

    加密

    hashlib:安全散列与消息摘要

    hmac:针对消息认证的键散列

    操作系统工具

    os:多方面的操作系统接口

    io:流核心工具

    time:时间的查询与转化

    argparser:命令行选项、参数和子命令的解析器

    optparser:命令行选项解析器

    getopt:C风格的命令行选项解析器

    logging:Python日志工具

    logging.config:日志配置

    logging.handlers:日志处理器

    getpass:简易密码输入

    curses:字符显示的终端处理

    curses.textpad:curses程序的文本输入域

    curses.ascii:ASCII字符集工具

    curses.panel:curses的控件栈扩展

    platform:访问底层平台认证数据

    errno:标准错误记号

    ctypes:Python外部函数库

    并发

    threading:基于线程的并行

    multiprocessing:基于进程的并行

    concurrent:并发包

    concurrent.futures:启动并行任务

    subprocess:子进程管理

    sched:事件调度

    queue:同步队列

    select:等待I / O完成

    dummy_threading:threading模块的替代(当_thread不可用时)

    _thread:底层的线程API(threading基于其上)

    _dummy_thread:_thread模块的替代(当_thread不可用时)

    进程间通信

    socket:底层网络接口

    ssl:socket对象的TLS / SSL填充器

    asyncore:异步套接字处理器

    asynchat:异步套接字命令 / 响应处理器

    signal:异步事务信号处理器

    mmap:内存映射文件支持

    互联网

    email:邮件与MIME处理包

    json:JSON编码与解码

    mailcap:mailcap文件处理

    mailbox:多种格式控制邮箱

    mimetypes:文件名与MIME类型映射

    base64:RFC3548:Base16、Base32、Base64编码

    binhex:binhex4文件编码与解码

    binascii:二进制码与ASCII码间的转化

    quopri:MIMEquoted - printable数据的编码与解码

    uu:uuencode文件的编码与解码

    展开全文
  • Python常用标准库(一)

    千次阅读 2018-12-19 19:07:02
    Python语言的核心只包含数字、字符串、列表、字典、文件等常见类型和函数,而由Python标准库提供了系统管理、网络通信、文本处理、数据库接口、图形系统、XML处理等额外的功能。 Python标准库的主要功能有: 文本...

    知识点介绍

    Python拥有一个强大的标准库。Python语言的核心只包含数字、字符串、列表、字典、文件等常见类型和函数,而由Python标准库提供了系统管理、网络通信、文本处理、数据库接口、图形系统、XML处理等额外的功能。

    Python标准库的主要功能有:

    • 文本处理,包含文本格式化、正则表达式匹配、文本差异计算与合并、Unicode支持,二进制数据处理等功能
    • 文件处理,包含文件操作、创建临时文件、文件压缩与归档、操作配置文件等功能
    • 操作系统功能,包含线程与进程支持、IO复用、日期与时间处理、调用系统函数、日志(logging)等功能
    • 网络通信,包含网络套接字,SSL加密通信、异步网络通信等功能
    • 网络协议,支持HTTP,FTP,SMTP,POP,IMAP,NNTP,XMLRPC等多种网络协议,并提供了编写网络服务器的框架
    • W3C格式支持,包含HTML,SGML,XML的处理。
    • 其它功能,包括国际化支持、数学运算、HASH、Tkinter等

    系统环境

    • Linux Ubuntu 14.04
    • Python 3.6
    • Ipython
    • PyCharm

    本实验共包含sys、os、glob、math、random、platform、pikle与cPikle、subprocess等8个标准库

    实验步骤

    1.sys模块:

    sys模块包括了一组非常实用的服务,内含很多函数方法和变量,用来处理Python运行时的配置以及资源,从而可以与前当程序之外的系统环境交互,如:Python解释器。

    sys模块的常见函数列表:

    (1) sys.argv 实现从程序外部向程序内部传递参数

    sys.argv 变量是一个包含了命令行参数的字符串列表,利用命令行向程序传递参数.。其中,脚本的名称总是 sys.argv 列表的第一个参数。

    argv[0] #代表本身名字

    argv[1] #第一个参数

    argv[2] #第二个参数

    argv[3] #第三个参数

    argv[N] #第N个参数

    1.使用vim编辑一个test.py文件,内容如下:

    #!/usr/bin/env python  
    import sys  
    print (sys.argv[0])  
    print (sys.argv[1])  
    print (sys.argv)  

    2.传递一个参数argvtest,运行test.py文件

    python test.py argvtest 

     结果为:

    test.py
    argvtest
    ['test.py','argvtest']

     

    值得注意的是,argv既然是一个列表,那么可以通过len()函数获取这个列表的长度从而知道输入的参数数量。可以看到列表把自身文件名也写了进去,所以当我们统计的使用应该-1才是实际的参数数量,因此可以使用len(sys.argv[1:])获取参数长度。

    (2)sys.exit(n)

    sys.exit(n) 退出程序引发SystemExit异常,可以捕获异常并执行些清理工作。n默认值为0,表示正常退出。其他都是非正常退出,还可以sys.exit("sorry, goodbye!");一般主程序中使用此方式退出。

    1.使用vim编辑一个exit.py文件,内容如下:

    #!/usr/bin/python  
    import sys  
      
    print("hello world1")  
    sys.exit(0)  
      
    print("hello world2")  

     

    2.运行exit.py文件

    python exit.py  
    结果为:
    hello world1

     

    (3)sys.path

    模块搜索路径,可以将写好的模块放在该路径下,就可以在程序中import时正确找到

    示例:

    import sys  
      
    sys.path  

     

    输出的是一个列表,里面包含了当前Python解释器所能找到的模块目录。

    (4)sys.modules

    sys.modules是一个全局字典,该字典是python启动后就加载在内存中。每当程序员导入新的模块,sys.modules将自动记录该模块。当第二次再导入该模块时,python会直接到字典中查找,从而加快了程序运行的速度。它拥有字典所拥有的一切方法。

    1.使用vim编辑一个modules.py文件,内容如下:

    #!/usr/bin/python  
    import sys  
      
    print(sys.modules.keys())  
    print("**************************************************************************")  
    print(sys.modules.values())  
    print("**************************************************************************")  
    print(sys.modules["os"])  

     

    2.运行modules.py文件

    python modules.py

      (5)sys.stdin/sys.stdout/sys.stderr 

    stdin,stdout,stderr包含与标准I/O流对应的流对象,如果需要更好地控制输出,而print不能满足我们的要求,它们就是我们所需要的。也可以替换它们,这时候我们可以重定向输出和输入到其它设备( device ),或者以非标准的方式处理它们。

    1.测试一下标准输入:

    import sys  
    print('Hi, %s!' %input('Please enter your name: '))  

     

    2.测试一下标准输出:

    print('Hello World!\n')  

     

    这就是从 标准输入:键盘 获取信息,再输出到 标准输出: 屏幕;

    那么上面的例子中input和print是如何与标准输入/输出流 建立关系的呢?

    其实Python程序的标准输入/输出/出错流定义在sys模块中,分别为: sys.stdin,sys.stdout,sys.stderr

    上面的测试标准输入、输出程序与下列的程序是一样的:

    3.使用vim编辑一个stdin.py文件,内容如下:

    #!/usr/bin/python  
    import sys  
    print('Please enter your name:')  
    name=sys.stdin.readline()[:-1]  
    print('Hi, %s!' %name)  

     

    4.运行stdin.py文件

    python stdin.py  
    结果为:
    Please enter your name:
    python
    Hi,python!

     

    5.使用vim编辑一个stdout.py文件,内容如下:

    #!/usr/bin/python  
    import sys  
    sys.stdout.write('Hello World!\n')  

     

    6.运行stdout.py文件

    python stdout.py  
    结果为:
    Hello World!

     

    7.sys.stderr一般是错误信息。stderr对象接收出错信息。

    2.os模块:

    在自动化测试中,经常需要查找操作文件,比如说查找配置文件(从而读取配置文件的信息),查找测试报告(从而发送测试报告邮件),经常要对大量文件和大量路径进行操作,这就依赖于os模块

    在Python界面可以通过help()命令查看os模块的详细介绍,按q退出help()

    import os  
      
    help(os)  

     

    os以及其子模块包含的功能很多,这里我们介绍常用子模块

    (1)关于path子模块:

    (2)关于文件/目录/属性

    (3)关于环境变量

    (4)关于进程

    3.glob模块:

    文件查找,支持通配符(*、?、[])

    1.创建a.sh、b.sh、c.sh、ab.sh

    touch a.sh b.sh c.sh ab.sh 

    2.查找目录中所有以.sh为后缀的文件

    import glob  
      
    glob.glob('/data/*.sh')  

    3.查找目录中以单个字符命名并以.sh为后缀的文件

    4.查找/data目录中的a.sh或b.sh的文件

    4.math模块:

    数字处理模块

    5.random模块:

    生成随机数

    6.platform模块:

    获取操作系统详细信息

    7.pickle与cPickle模块:

    创建可移植的Python序列化对象,持久化存储到文件

    (1)pickle

    pickle库有两个常用的方法,dump()、load() 和dumps()、 loads()

    dump()方法是把对象保存到文件中。格式:dump(obj, file, protocol=None)

    load()方法是从文件中读数据,重构为原来的Python对象。格式:load(file)

    举例:

    1.使用dump()方法将字典序列化到文件

    import pickle  
      
    dict = {'a':1,'b':2,'c':3}  
      
    output = open('/data/data.plk','wb')  
      
    pickle.dump(dict,output)  
      
    output.close()  

    2.使用load()方法读取data.plk文件

    dumps()返回一个pickle格式化的字符串。格式:dumps(obj, protocol=None)

    loads()解析pickle字符串为对象。

    举例:

    #创建安一个字符串s  
    s = 'abc'  
    #使用dumps()方法返回一个pickle格式化的字符串  
    pkl = pickle.dumps(s)  
      
    pkl  
    #使用loads()方法解析pickle字符串为对象  
    pickle.loads(pkl)  

    (2)cPickle

    cPickle库是C语言实现,对pickle进行了优化,提升了性能,代码中建议使用。cPicke提供了与pickle相同的dump()、load() 和dumps()、 loads()方法,用法一样。

    8.subprocess模块:

    subprocess库会fork一个子进程去执行任务,连接到子进程的标准输入、输出、错误,并获得它们的返回代码。这个模块将取代os.system、os.spawn*、os.popen*、popen2.*和commands.*。

    (1)subprocess.call():运行命令与参数。等待命令完成,返回执行状态码。

    #导入subprocess  
    import subprocess  
    方法一:  
    subprocess.call(["ls", "-l"])  
    方法二:  
    subprocess.call('ls -l', shell=True)  

    (2)subprocess.Popen():subprocess模块中只定义了一个类: Popen。

    可以使用Popen来创建进程,并与进程进行复杂的交互。它的构造函数如下:

    subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0)

    subprocess.Popen()类又提供的方法:

     

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 87,287
精华内容 34,914
关键字:

python常用标准库

python 订阅