10. 标准库简介

10. 标准库简介

10.1 操作系统接口

os 模块是关于与操作系统交互的模块:
Test.py:

import os

#获取当前工作目录
print(os.getcwd())

#改变当前工作目录
os.chdir("/Users")
print(os.getcwd())

#使用命令行执行命令
os.system("echo 1233")

运行结果:

/Users/chenxiaowei/Desktop/VsCode-PythonWorkSpace
/Users
1233

还需要注意的是最好使用import os 而不要使用from os import * 因为这样会覆盖方法, 如open()和os.open()就很不同.

内置的dir()和help().
help():可以查看指定的模块的使用方式, 没有参数的话会进入help模式.
Test.py:

import os

help(os)

运行结果:

Help on module os:

NAME
    os - OS routines for NT or Posix depending on what system we're on.

MODULE REFERENCE
    https://docs.python.org/3.7/library/os
    ....
    ....
    ....
    ....

shutil模块用于更为方便的目录管理.
Test.py:

import shutil
import os

os.chdir("test")
print(os.getcwd())

shutil.copyfile("NewFile.txt", "11.txt")
shutil.move("NewFile.txt", "12.txt")

shutil.copyfile() : 用于复制文件
shutil.move() : 用于移动文件

10.2 文件通配符

glob 模块可用于在目录中使用通配符搜索返回文件列表的函数.
Test.py:

import glob

print(glob.glob("*.py"))

运行结果:

['Test.py', 'Main.py', 'Part.py']

10.3 命令行参数

使用命令行执行此main.py, 使用sys模块的argv查看参数.
Main.py:

import sys

print(sys.argv)

Commend:

chenxiaoweideMacBook-Pro:~ chenxiaowei$ python /Users/chenxiaowei/Desktop/VsCode-PythonWorkSpace/Main.py  1 2 3

运行结果:

['/Users/chenxiaowei/Desktop/VsCode-PythonWorkSpace/Main.py', '1', '2', '3']

argparse模块: argparse 是 Python 内置的一个用于命令项选项与参数解析的模块,通过在程序中定义好我们需要的参数,argparse 将会从 sys.argv 中解析出这些参数,并自动生成帮助和使用信息.
参考: https://blog.csdn.net/qq_36653505/article/details/83788460
Main.py:

import argparse

#创建一个解析对象
parser = argparse.ArgumentParser(prog = 'top',
    description = 'Show top lines from each file')

#向该对象中添加你要关注的命令行参数和选项
parser.add_argument('filenames', nargs='+')

parser.add_argument('-l', '--lines', type=int, default=10)

args = parser.parse_args()

print(args)

Commend:

chenxiaoweideMacBook-Pro:~ chenxiaowei$ python /Users/chenxiaowei/Desktop/VsCode-PythonWorkSpace/Main.py --lines=11 ss.txt pp.txt
Namespace(filenames=['ss.txt', 'pp.txt'], lines=11)

10.4 错误输出重定向和程序终止

sys模块有stdin, stdout, stderr等属性, 使用stdin可以定义输入是什么, stdout输出是什么, stderr 输出错误是什么, stdout默认是屏幕, 使用print()会将其输出到屏幕, 可以更改为文件, 将信息输出到文件里.
Test.py:

import sys

#保存默认输出到屏幕的方式.
temp = sys.stdout
sys.stdout = open("a.txt", "w")
sys.stdout.write("123411")
sys.stdout.close()

sys.stdout = temp
with open("a.txt", "r") as f:
    print(f.read())


sys.stderr = temp
sys.stderr.write("test")
print("1")

sys.stderr = open("a.txt", "w")
sys.stderr.write("4321")
sys.stderr.close()

with open("a.txt", "r") as f:
    print(f.read())

运行结果:

123411
test1
4321

可以使用sys.exit()退出.
Test.py:

import sys

sys.exit()
print("没有输出则退出了")

运行结果:

10.5 字符串模式匹配

re 模块为高级字符串处理提供正则表达式工具.
re.findall()返回匹配表达式的列表.
Test.py:

import re

# \b: 用于匹配f开头的单词  [a-z]:匹配a-z *:前面的表达式0-任意次数 
ansList = re.findall(r"\bf[a-z]*", "which foot or hand fell fastest")
print(ansList)

运行结果:

['foot', 'fell', 'fastest']

re.sub()是用于替换功能的函数.
Test.py:

import re
#匹配连续重复一次的字符串将其置换为一个.
print(re.sub(r'(\b[a-z]+) \1', r'\1', 'cat in the the hat'))

运行结果:

cat in the hat cat

10.6 数学

math 模块.
Test.py:

import math

print(math.pi)
print(math.cos(1))
print(math.sin(1))
print(math.log(1024,2))

运行结果:

3.141592653589793
0.5403023058681398
0.8414709848078965
10.0

random 模块提供随机选择的功能.
random.choice() 从序列中随机选择一个数.
Test.py:

import random

myList = ["1", "2", "3", "4", "5"]
n = 3
while n:
    ans = random.choice(myList)
    print(ans)
    n = n - 1

运行结果:

5
3
4

random.sample([], n) 从序列中随机选择n个.
Test.py:

import random

myList = ["1", "2", "3", "4", "5"]
print(random.sample(myList, 2))

运行结果:

['5', '3']

random.random() 随机返回一个float值.
Test.py:

import random

print(random.random())

运行结果:

0.048280080375733614

statistics 模块计算数值数据的基本统计属性.
使用statistics.mean()计算平均值.
Test.py:

import statistics

data = [1, 2, 3, 4, 5, 6]
ans = statistics.mean(data)
print(ans)

运行结果:

3.5

使用statistics.median()计算中位数, 当其为基数时返回中间那个, 当其为偶数个时返回中间二个数的平均数.
Test.py:

import statistics

data = [1, 2, 3, 4, 5, 1]
ans = statistics.median(data)
print(ans)

运行结果:

2.5

10.7 互联网访问

使用urllib.request检索数据.
Test.py:

from urllib.request import urlopen

with urlopen("http://www.baidu.com") as response:
    for line in response:
        line = line.decode("utf-8")
        print(line)

运行结果:

#关于百度的html
.....
.....
.....

使用smtp发送邮件.
Test.py:

import smtplib
from email.mime.text import MIMEText
from email.header import Header
 
# 第三方 SMTP 服务
mail_host="smtp.qq.com"  #设置服务器
mail_user="xxxxx@qq.com"    #用户名=qq邮箱
mail_pass="mniqkjvpwvuabsja"   #口令 
 
 
sender = 'xxxxx@qq.com'
receivers = ['xxxxx@qq.com']  # 接收邮件,可设置为你的QQ邮箱或者其他邮箱
 
message = MIMEText('Python 邮件发送测试...', 'plain', 'utf-8')
message['From'] = Header("testFrom", 'utf-8')
message['To'] =  Header("testTo", 'utf-8')
 
subject = 'Python SMTP 邮件测试'
message['Subject'] = Header(subject, 'utf-8')
 
 
try:
    smtpObj = smtplib.SMTP() 
    smtpObj.connect(mail_host, 25)    # 25 为 SMTP 端口号
    smtpObj.login(mail_user,mail_pass)  
    smtpObj.sendmail(sender, receivers, message.as_string())
    print("邮件发送成功")
except smtplib.SMTPException:
    print("Error: 无法发送邮件")

运行结果:

邮件发送成功

10.8 日期和时间

datetime 模块提供了日期和时间的类.
Test.py:

from datetime import date

#获取今天的日期
now = date.today()
print(now)

#格式化输出日期
print(now.strftime("%Y年%m月%d日....."))

#定义一个日期
tempDate = date(2013, 12, 3)
print(tempDate)

#日期相减
apartDay = now - tempDate
print(apartDay.days)

运行结果:

2020-02-09
2020年02月09日.....
2013-12-03
2259
符号含义
%y两位数的年份表示(00-99)
%Y四位数的年份表示(000-9999)
%m月份(01-12)
%d月内中的一天(0-31)
%H24小时制小时数(0-23)
%I12小时制小时数(01-12)
%M分钟数(00=59)
%S秒(00-59)
%a本地简化星期名称
%A本地完整星期名称
%b本地简化的月份名称
%B本地完整的月份名称
%c本地相应的日期表示和时间表示
%j年内的一天(001-366)
%p本地A.M.或P.M.的等价符
%U一年中的星期数(00-53)星期天为星期的开始
%w星期(0-6),星期天为星期的开始
%W一年中的星期数(00-53)星期一为星期的开始
%x本地相应的日期表示
%X本地相应的时间表示
%Z当前时区的名称
%%%号本身

10.9 数据压缩

zlib 模块支持常见的数据存档和压缩格式, 支持:zlib, gzip, bz2, lzma, zipfile, tarfile.

import zlib

s = b'abcsssssssssssssssssssssssssssssssssssss'
print(len(s))

#压缩
t = zlib.compress(s)
print(len(t))

#解压
p = zlib.decompress(t)
print(p)

#crc32用于校验数据的正确性
c = zlib.crc32(s)
print(c)

运行结果:

40
14
b'abcsssssssssssssssssssssssssssssssssssss'
2314734969

10.10 性能测量

doctest 模块可以扫描模块并且测试在文档字符串中的测试.
Test.py:

import doctest

def average(data):
    """testmod
    >>> print(average(1))
    1
    """
    return data/data

doctest.testmod()

运行结果:

**********************************************************************
File "/Users/chenxiaowei/Desktop/VsCode-PythonWorkSpace/Main.py", line 5, in __main__.average
Failed example:
    print(average(1))
Expected:
    1
Got:
    1.0
**********************************************************************
1 items had failures:
   1 of   1 in __main__.average
***Test Failed*** 1 failures.

unittest 模块可以在单独的文件里测试.
Test.py:

import unittest

def average(data):
    return 10 / len(data)

class TestStatisticalFunctions(unittest.TestCase):
    def test_average(self):
        self.assertEqual(average([1, 2]), 5.0)

        with self.assertRaises(ZeroDivisionError):
            average([])

unittest.main()

运行结果:

.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK

assertEqual() 用于测试数据和结果. with assertRaises()用于比较测试是否会抛出异常.

10.12 自带电池

  • xmlrpc.client 和 xmlrpc.server 模块使得实现远程过程调用变得小菜一碟。尽管存在于模块名称中,但不需要直接了解或处理XML。
  • email 包是一个用于管理电子邮件的库,包括MIME和其他符合 RFC 2822 规范的邮件文档。与 smtplib 和 poplib 不同(它们实际上做的是发送和接收消息),电子邮件包提供完整的工具集,用于构建或解码复杂的消息结构(包括附件)以及实现互联网编码和标头协议。
  • json 包为解析这种流行的数据交换格式提供了强大的支持。 csv 模块支持以逗号分隔值格式直接读取和写入文件,这种格式通常为数据库和电子表格所支持。 XML 处理由 xml.etree.ElementTree , xml.dom 和 xml.sax 包支持。这些模块和软件包共同大大简化了 Python 应用程序和其他工具之间的数据交换。
  • sqlite3 模块是 SQLite 数据库库的包装器,提供了一个可以使用稍微非标准的 SQL 语法更新和访问的持久数据库。
  • 国际化由许多模块支持,包括 gettext , locale ,以及 codecs 包。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值