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