第七章:模块类库和文件操作

本文详细介绍了Python中的模块和类库的使用,包括系统标准库和第三方库的安装管理。接着讲解了时间模块,如time、datetime和calendar,以及文件操作,如文件指针、基本读写模式、字节读写模式和加强读写模式。最后,文章还涵盖了文件的遍历、截取、pickle的二进制IO、tkinter的文件路径选择以及CSV和JSON文件的读写操作。
摘要由CSDN通过智能技术生成

第一节:关于模块和类库

使用系统标准库

什么是模块?
可以说,一个 xxx.py 就是一个模块。
什么是类库?
装有很多个模块的文件夹包,可以称为一个类库,更多的时候,这些python文件都是有机关联的。
有了模块和类库,我们可以轻松地站在巨人的肩膀上进行编程,例如我们使用的系统标准库第三方类库甚至是自己写的类库

  • 导入外部模块

从外部导入模块,有导入模块和导入成员两种方式,具体包括:
方式一:import path.module #导入模块
方式二: from path.module import member1,member2,… #导入指定模块下的具体成员
或者 :from path.module import * #导入指定模块下的全部成员

path指代模块所在的路径
module是模块,模块即xxx.py
member可以是变量、函数、类、以及包;

机智的导入
一个机智式的导入方式为:直写出需要的模块名或成员名,此时系统报语法错误,光标放在报错处,使用【alt】+【enter】快捷键,系统会自动识别和导入;

  • 什么是包

含有_ init _.py的文件夹称之为【包】;
在_ init .py中,我们可以为包中的其它模块做一些全局初始化的工作;
_ init
.py可以视为一个【与包名同名的模块】,引入 _init _.py中的成员方式为:
from 包名 import member
包文件夹中的xxx.py可以视为包模块的成员member,它的导入方式可以是:
import 包名.xxx,此时包被视为一个普通文件夹路径
from 包名 import xxx,此时包被视为一个模块,xxx.py被视为一个成员

  • 路径path

path是相对路径: 相对于【系统库标准库根目录】或【第三方库根目录】或【当前工程根目录】;
系统标准库根目录所在的位置为:解释器安装目录/Lib/
例如:C:\Python36\Lib;
第三方库根目录所在位置为:解释器安装目录/Lib/site-packages/
例如:C:\Python36\Lib\site-packages;
如果是导入工程内的模块,则相对路径的根目录为当前工程目录;

  • 回归测式

回归测试的作用是避免自动触发外部模块的业务逻辑
当我们导入一个自定义模块的时候,如果这个模块在成员定义以外,还包含一定的业务逻辑代码,则这些代码必须被写在【回归测试】中;
如果模块的业务逻辑不写在回归测试中,则外界在将其导入时(无论是导入模块还是导入成员),这些业务逻辑都会被自动触发;
我们通常会在回归测试中,测试一下自己写的函数和类是否正确

回归测试的写法:

if __name__ == '__main__':
    # 一些业务逻辑
    pass

安装第三方库

系统标准库是安装Python解释器时,自带安装的一些最基本最常用的的Python类库,它们的位置是:解释器安装目录/Lib/
光有系统标准库是远远不能满足多样化的开发需求的,我们还常常要使用到一些【第三方类库】,它们的位置是:解释器安装目录/Lib/site-packages/

  • 安装第三方类库:

Python解释器自带一个包管理工具pip.exe,它的位置是:解释器安装目录/Scripts/,通常我们在安装解释器时都选择将这个目录放到系统的环境变量中;

安装方式一:自动化安装第三方类库最简单的方式是在【控制台】中输入:

pip install 包名

包管理器pip会自动寻找和安装xxx及其所依赖的其它类库

安装方式二:在pip.exe同目录下还存在easy_install.exe,我们同样可以在【控制台】中输入:

easy_install 包名

pipeasy_install二者的区别是:pip 改善了不少 easy_install 的缺点,因此通常pip是一个更好的选择,除非某些类库指定使用easy_install进行安裝
pip的常用命令
安装类库:pip install 包名
更新类库:pip install -U 包名
卸载类库:pip uninstall 包名
检索类库:pip search 包名
查看帮助:pip help
以上命令也都有对应的easy_install版本,其功能是相同的

方式三:使用PyCharm安装和管理类库

打开IDE的设置,在工程解释器栏目中,我们可以通过点击如图所示的“+”和“-”来执行类库的安装与卸载;
点击“+”后,在弹出的搜索框中输入类库名称,在检索成功后点击install按钮,即可自动化完成安装;
还更多图形化功能,如蓝色升级箭头实现升级、安装时勾选安装到用户的第三方路径等

在这里插入图片描述

无论使用哪一种方式进行第三式库的安装,安装效果是一样的,安装成功后pycharm就可以简单使用了

使用自己写的类库

  • 将模块和包持久化为类库

一个复用率很高的本地的源码目录,我们可以考虑将其持久化为类库,这样就可以在所有工程中进行导入和使用;
持久化的方式很简单,就是将这个文件夹拷贝到【系统库标准库根目录】或【第三方库根目录】中,通常如无特殊必要,我们选择放在【第三方库根目录】中,即解释器安装目录/Lib/site-packages/
以后就可以像导入系统标准库或安装的第三方类库一样,使用我们自己定义的类库了;
当然,如果愿意共享,以后还可以选择将这部分代码,附带一些说明文档,共享到开源代码管理平台如github上去,供全世界的程序员使用;

第二节:关于时间模块

time模块

  • Epoch与Unix时间戳

【Epoch】 是计算机元年,指的是一个特定的时间:1970-01-01 00:00:00**
【Unix时间戳】 是指从元年到某个时间点所经历的秒数

  • 时间占位符
占位符 格式化意义 占位符 格式化意义
%Y: 表示年份 %U: 周,在当年的周数当年的第几周
%m: 表示月份([01,12]) %c: 日期时间的字符串表示。
%d: 在这个月中的天数 %x: 日期字符串(如:04/07/10)
%a 星期的简写 %X: 时间字符串(如:10:43:39)
%A 星期的全写 %w: 今天在这周的天数,范围为[0, 6],6表示周日
%b 月份的简写。 %W: 周,(当年的第几周)
%B 月份的全写。 %j: 在年中的天数 [001,366]
%M: 分钟([00,59]) %S: 秒(范围为[00,61],不是0-59)
%p: AM或者PM %f: 微秒范,围[0,999999
%H: 小时(24小时制,[0, 23]) %z: 与utc时间的间隔(本地时间,返回空字符串)
%I: 小时(12小时制,[0, 11]) %Z: 时区名称(本地时间,返回空字符串)
  • 时间操作的几个常用API

time.time()—— 元年距今时间戳
time.sleep(s)—— 睡眠
time.localtime(s)—— 当地时间
time.asctime(tuple)—— 将时间元组转为美式的时间字符串
time.ctime(s)—— 将时间戳转为时间字符串
time.strftime(foramt, tuple)—— 格式化时间
time.strptime(string,format)—— 将时间字符串转换为时间元组
time.mktime(tuple)—— 将时间元组转换为时间戳

例:

import time


# 元年距今时间戳
print('time.time():',time.time())

# 当地时间localtime,不传参默认当前时间戳,返回结构化时间(时间元组)
print(time.localtime())
# 昨日此刻时间
print(time.localtime(time.time()-24*3600))


# 美式化时间asctime,将时间元组转为时间字符串
print(time.asctime(time.localtime()))
# 美式化时间ctime,将时间戳转为时间字符串
print(time.ctime())


#  格式化成2016-03-20 11:45:39形式
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())) # 2018-03-22 21:10:48

# 格式化成Sat Mar 28 22:24:24 2016形式
print(time.strftime("%a %b %d %H:%M:%S %Y", time.localtime()))
print(time.strftime("%z", time.localtime()))
print(time.strftime("%a %A", time.localtime()))
print(time.strftime("%b %B", time.localtime()))
print(time.strftime("%c", time.localtime()))
print(time.strftime("%I", time.localtime()))
print(time.strftime("%p", time.localtime()))


a = "Sat Mar 28 22:24:24 2016"
#  将时间字符串转换为时间元组
print(time.strptime(a, "%a %b %d %H:%M:%S %Y"))
# 将时间元组转换为时间戳
print(time.mktime(time.strptime(a, "%a %b %d %H:%M:%S %Y")))

执行结果:
在这里插入图片描述

datetime模块

time模块提供的功能是更加接近于操作系统层面的。通读文档可知,time 模块是围绕着 Unix Timestamp 进行的。time模块表述的日期范围被限定在 1970 - 2038 之间,如果你写的代码需要处理在前面所述范围之外的日期,那可能需要考虑使用datetime模块更好。
在系统的标准库里面,有个模块名为datetime,而datetime模块里还有一个类,也名为datetime,平时导入的时候应注意,导入的应是模块,而不是类,
在这里插入图片描述

  • datetime的几个常用API
    在这里插入图片描述

在标准库的datetime模块里有很多方法,这里主要介绍datetime.datetime的方法
datetime.datetime.now() —— 当前的日期和时间
datetime.datetime.now().year —— 当前的年份
datetime.datetime.now().month —— 当前的月份
datetime.datetime.now().day —— 当前的日期
datetime.datetime.now().hour —— 当前小时
datetime.datetime.now().minute —— 当前分钟
datetime.datetime.now().second —— 当前秒
相对于time模块来说,datetime 比 time 高级了不少,也更简洁,返回值也更友好一些。可以理解为 datetime 基于 time 进行了封装,提供了更多实用的函数。

例:

import datetime

now = datetime.datetime.now()
print("当前的日期和时间是%s" % now)
print("当前的年份是%s" % now.year)
print("当前的月份是%s" % now.month)
print("当前的日期是 %s" % now.day)
print("当前小时是%s" % now.hour)
print("当前分钟是%s" % now.minute)
print("当前秒是%s" % now.second)

执行结果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值