(七) 学习笔记: python文件操作pickle模块使用和时间模块

文件打开

open(file, mode='r', buffering=-1, encoding=None, ...)

在使用open()的时候, 如果文件不存在, 会抛出IOError异常
参数介绍:

  • file: 打开的文件名。
  • mode: 文件打开方式。
    'r': 只读的方式打开(默认)
    'rb': 已二进制只读的形式打开
    'w': 清空写的形式打开, 如果文件不存在则尝试创建
    'wb': 清空写二进制形式打开, 如果文件不存在则尝试创建
    'a': 追加写, 文件不存在则尝试创建
    'ab': 二进制的追加写, 文件不存在则尝试创建
  • buffering: 用于设置缓冲策略。
  • encoding: 设置编码方式或解码的方式, 只适用于文本文件, 二进制文件设置会报错。 不设置默认为系统编码。
    实例:
file = open('1.txt', 'r', encoding="utf-8")  # 以文本的形式读取文件
file = open("2.txt", 'rb', encoding="utf-8")  # error 二进制形式打开会报ValueError错

文件读取

函数名 函数说明
file.read([size]) 不设置参数读取全部内容, 如果传入size, 安装给定的字节长度读取
file.readline() 读取一行
file.readlines() 读取所有行,以列表的形式返回
next(file) file对象实现了迭代器的next()的功能, 可以一行一行的读取

文件的写

函数名 函数说明
file.write(str) 写入字符串(可为文字,可为二进制数据), 返回写入的字节数
file.writelines(列表) 向文件写入一个列表, 只把列表中的文件写入,不保留格式
file.flush() 刷新缓冲区, 将内容立即写入到文件
file.close() 文件关闭

文件的编码和解码

str.encode(字符编码) # 编码
b'Str'.decode(字符编码) # 解码

with语句的使用

使用with语句代码更佳简洁, 并且不必调用 f.close() 方法, 来刷新文件内容

with open(file, mode='r', encoding='utf-8', ..) as fp:
    fp.write(str)

pickle模块序列化操作

1. dump()方法写入到文件里
import pickle
myList = ['a', 'b', 'c']
file = open(文件名, 'wb')  # 必须是二进制的方式进行读写
pickle.dump(数据, file对象) 
2. load() 方法将数据反序列化后取出来
import pickle
file = open(文件名, 'rb')  # 必须是二进制的方式进行读写
myList = pickle.load(file对象)
print(myList)  # ['a', 'b', 'c']

# 多次dump, 需要多次load读取文件
import pickle
file = open("a.txt", 'wb')  # 必须是二进制方式读写
myList = [1,2,3]
myDict = {'id':1, 'age':18}
pickle.dump(myList, file)  # 写入myList 
pickle.dump(myDict, file) # 写入myDict 
# 读取
file = open("a.txt", 'rb') 
file = open("a.txt", 'rb')  # 必须是二进制方式读写
myList = [1,2,3]
myDict = {'id':1, 'age':18}
myList = pickle.load(file)  # [1, 2, 3]
myDict = pickle.load(file)  #  {'id': 1, 'age': 18}
print(myList, myDict)
3. dumps(obj)方法将数据序列化后直接返回

以字节对象形式返回封装的对象, 不需要写入文件中

myList = [1,2,3]
bObj = pickle.dumps(myList )
4. loads(bytes_obj) 方法用于将序列化后对象进行反序列化

从字节对象中读取被封装的对象, 并返回

# loads()的操作
myList = pickle.loads(bObj)  #  [1,2,3]

时间模块

函数名 函数说明
time.time() 返回当前的秒数(时间戳)
time.localtime([时间戳]) 返回时间的元组, 参数为时间戳(可选), 不传参数为当前时间
time.asctime() 返回格式化后的英文文本时间
time.strftime(格式化时间占位符, [时间元组]) 格式化时间, 默认本地时间
time.mktime(时间元组) 将时间元组转为时间戳返回
time.sleep(秒) 推迟调用线程的时间
time.strptime("时间字符串", 格式化时间占位符) 将指定的时间格式转换为时间元组
time.clock() 用浮点数计算当前cpu运行某个程序所花费的时间

常用时间模块: time, datetime
time模块常用的函数
概念: 时间戳是指格林威治1970年1月1日00时00分00秒到现在的整数或者浮点数的秒数

函数名 函数说明
time.time() 返回当前的秒数(时间戳)
time.localtime([时间戳]) 返回时间的元组, 参数为时间戳(可选), 不传参数为当前时间
time.asctime() 返回格式化后的英文文本时间
time.strftime(格式化时间占位符, [时间元组]) 格式化时间, 默认本地时间
time.mktime(时间元组) 将时间元组转为时间戳返回
time.sleep(秒) 推迟调用线程的时间
time.strptime("时间字符串", 格式化时间占位符) 将指定的时间格式转换为时间元组
time.clock() 用浮点数计算当前cpu运行某个程序所花费的时间

实例:

# 给出时间 转换为时间戳
myStr = "2018-1-5 14:28:00"
timeTuple = time.strptime(myStr, "%Y-%m-%d %H:%M:%S")
time.mktime(timeTuple)  # 返回时间戳

时间的格式化符号

符号 符号说明
%Y 4位年份
%y 2为年份
%m 月份(1-12)
%d 一个月的某一天(1-31)
%H 24小时制(0-23)
%M 分钟
%S 秒数
%a 格式化为简化英文文本的星期
%A 格式化为全称英文文本的星期
%j 一年中的第几天
%w 返回星期中的第几天(0-6)
%x 格式化成本地的月/日/年
%X 格式化成本地的时:分:秒
函数名 函数说明
datetime.now() 返回当前的时间
datetime.datetime(年,月,日,时,分,秒,微妙数) 获取指定的时间
时间.timestamp() 通过时间返回时间戳
datetime.formtimestamp(时间戳) 把时间戳转换为时间
datetime.now().strftime(格式化的符号) 格式化时间

datetime模块
from datetime import datetime # 从库中导入模块

函数名 函数说明
datetime.now() 返回当前的时间
datetime.datetime(年,月,日,时,分,秒,微妙数) 获取指定的时间
时间.timestamp() 通过时间返回时间戳
datetime.formtimestamp(时间戳) 把时间戳转换为时间
datetime.now().strftime(格式化的符号) 格式化时间

推荐阅读更多精彩内容