欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-10 15:26:44
...

文件打开

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(格式化的符号) 格式化时间