Python学习笔记(八)小知识点总结(2/2)

1.Python3 标准库概览

1. os模块提供了不少与操作系统相关联的函数。如

import os
返回当前的工作目录
print(os.getcwd())

修改当前的工作目录
os.chdir('/server/accesslogs')

执行系统命令 mkdir 
os.system('mkdir today')

显示模块中类及相关属性
dir(os)
help(os)

2. 针对日常的文件和目录管理任务:shutil

import shutil

shutil.copyfile('data.db', 'archive.db')
shutil.move('/build/executables', 'installdir')

3. 文件通配符:glob模块提供了一个函数用于从目录通配符搜索中生成文件列表(生成的是以列表形式的数据,可以遍历等)

import glob
glob.glob('*.py')
交互模式下生成查询后的列表

4. 命令行参数,通用工具脚本经常调用命令行参数。这些命令行参数以链表形式存储于 sys 模块的 argv 变量

import sys

#返回一个列表
print(sys.argv)

#退出程序
sys.exit()

#其他一些常用
sys.platform、sys.version、sys.path、sys.winver等

5. 字符串正则匹配

import re

my_str = re.findall(r’\bf[a-z]*’, ‘which foot or hand fell fastest’)
print(my_str)

my_str = re.sub(r’(\b[a-z]+) \1’, r’\1’, ‘cat in the the hat’)
print(my_str)

输出:
[‘foot’, ‘fell’, ‘fastest’]
cat in the hat

6. 数学

  • math模块为浮点运算提供了对底层C函数库的访问:

  • random提供了生成随机数的工具

     import math
     import random
     
     math.cos(math.pi / 4)
     random.choice(['apple', 'pear', 'banana'])
     random.random()
     random.sample(range(100), 10)
     random.randrange(6)
    

7. 访问互联网
有几个模块用于访问互联网以及处理网络通信协议。其中最简单的两个是用于处理从 urls 接收的数据的 urllib.request 以及用于发送电子邮件的 smtplib:

举例1<访问网址>:

import urllib.request
import urllib.parse
import json


def traslate(words):
    # 目标URL
    targetURL = "http://fanyi.youdao.com/translate_o?smartresult=dict&smartresult=rule"
    # 用户自定义表单,words表示的是用户要翻译的内容。这里使用的是dict类型,也可以使用元组列表(已经试过的)。
    data = {}
    data['type'] = 'AUTO'
    data['i'] = words
    data['doctype'] = 'json'
    data['xmlVersion'] = '1.8'
    data['keyfrom'] = 'fanyi.web'
    data['ue'] = 'UTF-8'
    data['action'] = 'FY_BY_CLICKBUTTON'
    data['typoResult'] = 'true'
    # 将自定义data转换成标准格式
    data = urllib.parse.urlencode(data).encode('utf-8')
    # 发送用户请求
    html = urllib.request.urlopen(targetURL, data)
    # 读取并解码内容
    rst = html.read().decode("utf-8")
    rst_dict = json.loads(rst)
    return rst_dict['translateResult'][0][0]['tgt']


if __name__ == "__main__":
    print("输入字母q表示退出")
    while True:
        words = input("请输入要查询的单词或句子:\n")
        if words == 'q':
            break
        result = traslate(words)
        print("翻译结果是:%s" % result)

举例2<发送邮件>

import smtplib
from email.mime.text import MIMEText
from email.header import Header

sender = 'miaomiao@163.com'
password = '123456'

receiver = 'miaomiao@qq.com' # 接收邮件,可设置为你的QQ邮箱或者其他邮箱

三个参数:第一个为文本内容,第二个 plain 设置文本格式,第三个 utf-8 设置编码
message = MIMEText('Python 邮件发送测试...', 'plain', 'utf-8')
message['From'] = sender  # 发送者
message['To'] = receiver  # 接收者

subject = 'Python SMTP 邮件测试'
message['Subject'] = Header(subject, 'utf-8')

try:
    server = smtplib.SMTP('smtp.163.com', 25)
    server.login(sender, password)
    server.sendmail(sender, receiver, message.as_string())
    server.quit()
    print("邮件发送成功")

except smtplib.SMTPException:
    print("Error: 无法发送邮件")

补充:

  1. login()方法用来登录SMTP服务器,sendmail()方法就是发邮件,可以一次发给多个人,所以传入一个list,邮件正文是一个str,as_string()把MIMEText对象变成str。
  2. 因为采用的是SMTP协议,那么需要确保自己的发送优邮箱地址开启了SMTP服务,否则,会报错(在邮件服务器中设置)
  3. password需要输入邮箱授权码,而非邮箱登录密码
  4. 更多详细内容可参考:这位朋友写的很详细,深表感谢

8.日期和时间

datetime模块为日期和时间处理同时提供了简单和复杂的方法。
支持日期和时间算法的同时,实现的重点放在更有效的处理和格式化输出。
该模块还支持时区处理:

from datetime import date
now = date.today()
print(now)

时间和日期补充
常用时间处理方法
今天 today = datetime.date.today()
昨天 yesterday = today - datetime.timedelta(days=1)
上个月 last_month = today.month - 1 if today.month - 1 else 12
当前时间戳 time_stamp = time.time()
时间戳转datetime datetime.datetime.fromtimestamp(time_stamp)
datetime转时间戳 int(time.mktime(today.timetuple()))
datetime转字符串 today_str = today.strftime("%Y-%m-%d")
字符串转datetime today = datetime.datetime.strptime(today_str, “%Y-%m-%d”)
补时差 today + datetime.timedelta(hours=8)

9. 数据压缩

以下模块直接支持通用的数据打包和压缩格式:zlib,gzip,bz2,zipfile,以及 tarfile。

import zlib

s = b'witch which has which witches wrist watch'
print('len before compress %d ' % len(s))

t = zlib.compress(s)
print('len after compress %d ' % len(t))
u = zlib.decompress(t)
print('decompress: {0}'.format(u))
m = zlib.crc32(s)
print(m)

10. 性能度量
有些用户对了解解决同一问题的不同方法之间的性能差异很感兴趣。Python 提供了一个度量工具,为这些问题提供了直接答案。
例如,使用元组封装和拆封来交换元素看起来要比使用传统的方法要诱人的多,timeit 证明了现代的方法更快一些。

from timeit import Timer

t1 = Timer(‘t=a; a=b; b=t’, ‘a=1; b=2’).timeit()

t2 = Timer(‘a,b = b,a’, ‘a=1; b=2’).timeit()

print(t1, t2)

输出:
0.12594655370619984 0.09025109025319353
由结果可以看出第二种方式效率更高
更多详情参考time与timeit

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值