一门计算机语言,最强大的部分是库,它使程序员仅通过简单调用,就实现了强大的功能。本篇介绍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 运行结果:

python 在csv中写入序号 python csv 写入_python 删除csv第一行

打开文件,查看内容:


python 在csv中写入序号 python csv 写入_python dictwriter_02

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运行结果:


python 在csv中写入序号 python csv 写入_python csv追加写入_03

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 运行结果:

python 在csv中写入序号 python csv 写入_python 删除csv第一行_04

打开文件,查看内容:

python 在csv中写入序号 python csv 写入_python dictwriter_05

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 运行结果:

python 在csv中写入序号 python csv 写入_python 字典转json_06


打开文件,查看内容:

python 在csv中写入序号 python csv 写入_python 删除csv第一行_07

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运行结果:


python 在csv中写入序号 python csv 写入_python 在csv中写入序号_08

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 在csv中写入序号 python csv 写入_python csv追加写入_03

总结:

①基础库在各种编程场景中,使用频率最高,应该掌握

②由于太基础,在python安装包里已经自带了,无需单独安装