一门计算机语言,最强大的部分是库,它使程序员仅通过简单调用,就实现了强大的功能。本篇介绍python常用的基础库。
1.日期运算
日常涉及很多日期相关的计算,比如:在项目管理中,需要用“启动时间+计划工期”来获得交付时间;在购买商品时,要通过“过期日期-当前日期
python语法:
①这些接口由datetime库提供,因此要先用 “import
datetime
” 导入模块 ②可以获取当前日期 “ datetime.now()
” ,也可以获取指定日期 “datetime(年, 月, 日, 时, 分, 秒)”
③两个时间可以直接相减,时间间隔是 timedelta 类型,它用 “days” “
seconds
”表达时间段 ④两个时间也可以通过比较运算符,直接确定早晚完整代码:
from datetime import datetime, timedelta# 当前日期now = datetime.now()print('当前日期:', end='')print(now)# 指定日期someDate = datetime(2020, 9, 1, 12, 0, 1)print('指定日期:', end='')print(someDate)# 文本转日期convertedDate = datetime.strptime('2020-6-1 16:17:18', '%Y-%m-%d %H:%M:%S')print('文本转日期:', end='')print(convertedDate)# 日期格式化print('日期格式化:', end='')print(now.strftime('%Y/%m/%d, %H:%M:%S'))# 日期推算computeDate = now + timedelta(days=2, hours=12, minutes=3, seconds=20)print('日期推算:', end='')print(computeDate)# 日期相减dateSpan = someDate - nowprint('日期相减:', end='')print(dateSpan)
2.读写文件
文件是存储数据的媒介,计算机通过路径识别它。写文件通常有2种情况,一种是从头覆盖写,一种是追加在已有的内容后面;
读文件就直接取出全部数据。
python语法:
①打开文件的语法是 “with open(文件路径, 读写模式, encoding='utf-8') as f”
②由于“文件路径”中包含转义符号“\”,为了正确输出,要用到字符串的原样输出语法 “r'文本'”
③常用的“读写模式”有3种:'w'是覆盖,'a'是追加,'r'是读
④“encoding='utf-8'” 是为了处理中文
⑤“f” 代表操作的文件
⑥由于文件中的数据是多行文本,python提供了2种数据粒度的操作:多行和单行
完整
代码:
# 文件放在桌面上,程序运行后,可自行打开查看filePath = r'C:\Users\Administrator\Desktop\fileDemo.txt'# 覆盖写 wwith open(filePath, 'w', encoding='utf-8') as f: # 数据粒度:多行 f.write('''第一行 第二行''')# 追加 awith open(filePath, 'a', encoding='utf-8') as f: # 数据粒度:单行 f.writelines(['\n第3行', '\n第4行'])# 读 rwith open(filePath, 'r', encoding='utf-8') as f: # 数据粒度:多行 #content = f.read() # 数据粒度:单行 content = f.readlines()# 查看读取结果print(content)
VSCode
运行结果:
打开文件,查看内容:
3.路径和目录
当我们保存或读取文件时,不可避免要处理文件的路径,以及它所在的目录。对于目录的操作,主要是“创建、删除、改名、列出目录内容”;对于文件路径的操作,主要是“合并、拆分”。
python语法:
①这些接口由os库提供,因此要先用 “import
os
” 导入模块 ②判断路径是否存在,语法为 “ os.path.exists(路径)
” ③创建新目录的语法为 “ os.mkdir(路径)
”;删除空目录的语法为 “ os.rmdir(路径)
”④要把目录和它下面的文件连接到一起,生成文件路径的语法为 “ os.path.join(目录, 文件名)” ;反之,要将文件路径拆成文件名和所在目录,语法为 “
os.path.split(路径)”⑤列举目录下的内容,语法为 “
os.listdir(DIR_NEW)”⑥删除文件的语法为 “
os.remove(路径)”完整代码:
import osDIR = r"C:\Users\Administrator\Desktop\Dir"DIR_NEW = DIR + '_New'# 目录是否存在DirExists = os.path.exists(DIR)# 创建目录if not DirExists: os.mkdir(DIR)# 目录改名os.rename(DIR, DIR_NEW)# 路径拆分dirParts = os.path.split(r'C:/Program Files (x86)/Python38-32/python.exe')print('父目录:' + dirParts[0])print('子目录/文件:' + dirParts[1])# 路径合并for name in ['1.txt', 'test.py', '操作文件.doc']: filePath = os.path.join(DIR_NEW, name) # 创建空文件 with open(filePath, 'w') as f: pass# 列出目录内容for x in os.listdir(DIR_NEW): print(x)if input('按下任意键,删除文件和目录'): # 删除文件 for x in os.listdir(DIR_NEW): os.remove(os.path.join(DIR_NEW, x)) # 删除目录 os.rmdir(DIR_NEW)
VSCode运行结果:
4.读写csv
普通文件存储数据过于粗放,最多只能将数据粒度精确到行;
而 cs v文件 将数据粒 度 精确到了列,以纯文本形式存储表格化数据,尤其适用于 数据量较小
的结构化数据。
由于csv也是文件,所以操作文件的语法是相同的,仅仅是处理数据的语法不同。数据分为2部分:标题行和内容行;标题行说明数据的结构,它的数据类型是列表;内容行存储业务数据,它的数据类型是字典。
python语法: ①这些接口由csv库提供,因此要先用 “import csv” 导入模块
②在获取写入流的同时、定义标题行,用 “writer = csv.DictWriter(f, fieldnames=标题行)”
③写标题行用 “writer.writeheader()”
④写数据行用 “writer.writerows(字典类型的业务数据)”
⑤读取文件用 “reader = csv.DictReader(f)”,得到是字典类型的业务数据
完整
代码:
import csv# 文件放在桌面上,程序运行后,可自行打开查看filePath = r'C:\Users\Administrator\Desktop\csvDemo.csv'# 数据结构columns = ['语言', '流行度']# 覆盖写 wwith open(filePath, 'w', encoding='utf-8') as f: # 标题行 writer = csv.DictWriter(f, fieldnames=columns) writer.writeheader() # 内容行 rows = [{ '语言': 'python', '流行度': 5 }, { '语言': 'java', '流行度': 4 }, { '语言': 'c#', '流行度': 3 }] writer.writerows(rows)# 追加 awith open(filePath, 'a', encoding='utf-8') as f: writer = csv.DictWriter(f, fieldnames=columns) # 内容行 writer.writerows([{'语言': 'js', '流行度': 4}, {'语言': 'sql', '流行度': 3}])# 读 rwith open(filePath, 'r', encoding='utf-8') as f: reader = csv.DictReader(f) for row in reader: print(row['语言'] + ':' + row['流行度'])
VSCode
运行结果:
打开文件,查看内容:
5.读写Json
不同程序之间传递数据时,大多使用json;几乎所有语言都提供了json的转换功能,python也不例外。在python中,最常见的转换场景是字典和列表。
python语法:
①这些接口由json库提供,因此要先用 “import json” 导入模块
②直接序列化,用 “json.dumps(字典/列表)”
③直接反序列化,用 “json.loads('文本')”
④序列化到文件,用 “json.dump(字典/列表, 文件流)”
⑤从文件反序列化,用 “json.load(文件流)”
完整
代码:
import jsonpython字典 = {'name': '张三', 'age': 20, 'score': 88}json文本 = '{"name": "李四", "age": 30, "score": 98}'# 序列化print('序列化结果:' + json.dumps(python字典))# 反序列化print('反序列化结果:' + json.loads(json文本)['name'])filePath = r'C:\Users\Administrator\Desktop\json.txt'# 序列化到文件with open(filePath, 'w') as f: json.dump(python字典, f)# 从文件反序列化with open(filePath, 'r') as f: print('文件反序列化结果:' + json.load(f)['name'])
VSCode
运行结果:
打开文件,查看内容:
6.Sqlite3
csv和json仅能存储少量的结构化数据、且读写速度慢;如果要处理大量数据,还得靠数据库。这其中,sqlite是一款简单易用的小型数据库,无需安装、且足够应付日常使用,目前的版本是sqlite3。
使用数据库的套路是:先建立数据连接,再创建表结构,然后读写数据。
对于python来说,创建表结构和读写数据都是发sql,我们看一下它的语法:
①这些接口由sqlite3库提供,因此要先用 “import sqlite3
” 导入模块 ②建立数据连接的语法 “ with sqlite3.connect(db) as conn
” ③数据连接提供了一个处理sql的抓手cursor,语法是 “ cursor = conn.cursor()
” ④发送sql的语法是 “ cursor.execute(sql, 数据)
”,sql中的参数用 “?” 来占位,数据 ⑤增删改,可以通过 “ cursor.rowcount
” 获得受影响的行数
⑥查询结果是 元组列表,每行数据是一个tuple
完整代码:
import sqlite3# 创建表结构def createDbStructure(db): with sqlite3.connect(db) as conn: cursor = conn.cursor() # 是否已创建 tables = cursor.execute( 'select count(1) from sqlite_master where type="table"') tableCount = tables.fetchall()[0][0] print('%s中已经存在%d张表,无需重新创建' % (db, tableCount)) if tableCount > 0: return # integer primary key会自增长 cursor.execute('''create table user( user_id integer primary key, name varchar(20), age integer, sex boolean )''') cursor.execute('''create table salary( user_id integer, amount real )''') print('创建表结构完成')# 写数据def writeToDb(db): with sqlite3.connect(db) as conn: cursor = conn.cursor() # 增(批量) record = ("小明", 18, 1) records = [("张三", 25, 1), ("李四", 26, 0), ("王五", 35, 1), ("刘七", 40, 1)] insertSql = 'insert into user(name, age, sex) values(?, ?, ?)' cursor.execute(insertSql, record) cursor.executemany(insertSql, records) print('增的sql:' + insertSql) print('新增了%d条记录' % cursor.rowcount) # 删 condition = ("刘七", 25) deleteSql = 'delete from user where name=? or age <=?' cursor.execute(deleteSql, condition) print('删的sql:' + deleteSql) print('删除了%d条记录' % cursor.rowcount) # 改 updateSql = "update user set name=?, age=? where name=?" cursor.execute(updateSql, ("李美丽", 28, "李四")) print('改的sql:' + updateSql) print('修改了%d条记录' % cursor.rowcount) # 提交事务 conn.commit()# 读数据def readFromDb(db): with sqlite3.connect(db) as conn: cursor = conn.cursor() # 查 selectSql = 'select * from user left join salary on user.user_id = salary.user_id' rows = cursor.execute(selectSql) for r in rows: print(r)# 模拟运行db = 'test.db'createDbStructure(db)writeToDb(db)readFromDb(db)
VSCode运行结果:
7.Base64编码
在网络传输中,多媒体数据是二进制的,代码文件是普通文本。为了能够统一处理,我们约定在发送端使用Base64做编码,接收后再用Base64做解码。很多语言都提供了编/解码的方法,python也不例外。
python语法:
①这些接口由base64库提供,因此要先用 “import
base64
” 导入模块 ②编码之前,先将字符串转换为bytes对象,语法为 “ 字符串.e
ncode()
” ;同样,解码之后,要将bytes对象转换为字符串,语法为 “ 字符串.
decode()”
③编码有2种,一种是直接编码 “ base64.b64encode(bytes对象)
”;另一种是url编码 “base64
.urlsafe_b64encode
(bytes对象)”,它是为了应对url里的特殊字符④这里顺便使用了函数语法,“
def urlEncode(url)” 将编码和类型转换封装到了一起完整代码:
import base64# 编码encodedBytes = base64.b64encode('学习Python!'.encode())print('编码:', end='')print(encodedBytes)# 解码decodedBytes = base64.b64decode(encodedBytes)print('解码:', end='')print(decodedBytes.decode())# 封装url编码函数def urlEncode(url): return base64.urlsafe_b64encode(url.encode())# 封装url解码函数def urlDecode(urlEncodedBytes): return base64.urlsafe_b64decode(urlEncodedBytes).decode()print('url编码:', end='')urlEncodeResult = urlEncode('https://woods240.cn')print(urlEncodeResult)print('url解码:', end='')print(urlDecode(urlEncodeResult))
VSCode运行结果:
总结:
①基础库在各种编程场景中,使用频率最高,应该掌握
②由于太基础,在python安装包里已经自带了,无需单独安装