按文件中数据组织形式,我们把文件分为文本文件和二进制文件两大类。
Python标准库中,如下是文件操作相关的模块,我们会陆续给大家介绍。
名称 说明
io模块 文件流的输入和输出操作 input output
os 模块 基本操作系统功能,包括文件操作
glob模块 查找符合特定规则的文件路径名
fnmatch模块 使用模式来匹配文件路径名
fileinput 模块 处理多个输入文件
filecmp模块 用于文件的比较
cvs模块 用于 csv文件处理
pickle 和 cPickle 用于序列化和反序列化
xml包 用于 XML数据处理
bz2、gzip、 zipfile、 zlib、 tarfile 用于处理压缩和解压缩文件(分别对应不同的算法)
open()函数用于创建文件对象,基本语法格式如下:
open(文件名,[打开方式])
如果只是文件名,代表在当前目录下的文件。文件名可以录入全路径,比如:D:\a\b.txt。
为了减少“\”的输入,可以使用原始字符串:r“d:\b.txt”。示例如下:
f = open(r"d:\b.txt","w")
文本文件对象和二进制文件对象的创建:
如果我们没有增加模式“b”,则默认创建的是文本文件对象,处理的基本单元是“字
符”。如果是二进制模式“b”,则创建的是二进制文件对象,处理的基本单元是“字节”。
基本的文件写入操作
文本文件的写入一般就是三个步骤:
中文乱码问题
windows 操作系统默认的编码是 GBK,Linux操作系统默认的编码是 UTF-8。当用open()时,调用的是操作系统打开的文件,默认的编码是 GBK。
#通过指定文件编码解决中文乱码问题
f = open(r"b.txt","w",encoding="utf-8")
f.write("123456")
f.close()
write(a):把字符串a写入到文件中
writelines(b):把字符串列表写入文件中,不添加换行符
由于文件底层是由操作系统控制,所以我们打开的文件对象必须显式调用close()方法
关闭文件对象。当调用close()方法时,首先会把缓冲区数据写入文件(也可以直接调用flush()
方法),再关闭文件,释放文件对象。为了确保打开的文件对象正常关闭,一般结合异常机制的 finally或者with 关键字实现无论何种情况都能关闭打开的文件对象。
try:
f = open(r"my01.txt","a")
str = "gaoqi"
f.write(str)
except BaseException as e:
print(e)
finally:
f.close()
with关键字(上下文管理器)可以自动管理上下文资源,不论什么原因跳出with 块,都能
确保文件正确的关闭,并且可以在代码块执行完毕后自动还原进入该代码块时的现场。
s = ["高淇\n","高老三\n","高老五\n"]
with open(r"d:\bb.txt","w") as f:
f.writelines(s)
文件的读取一般使用如下三个方法:
#读取一个文件前4个字符
with open(r"bb","r",encoding="utf-8") as f:
print(f.read(4))
#文件较小,一次将文件内容读入到程序中
with open(r"d:\bb.txt","r") as f:
print(f.read())
#按行读取一个文件
with open(r"bb.txt","
with open(r"bb.txt","r") as f:
while True:
fragment = f.readline()
if not fragment:
break
else:
print(fragment,end="")
#使用迭代器(每次返回一行)读取文本文件
with open(r"d:\bb.txt","r") as f:
for a in f:
print(a,end="")
二进制文件的处理流程和文本文件流程一致。首先还是要创建文件对象.需要指
定二进制模式,创建出二进制文件对象。例如:
f = open(r"d:\a.txt", ‘wb’) #可写的、重写模式的二进制文件对象
f = open(r"d:\a.txt", ‘ab’) #可写的、追加模式的二进制文件对象
f = open(r"d:\a.txt", ‘rb’) #可读的二进制文件对象
创建好二进制文件对象后,仍然可以使用 write()、read()实现文件的读写操作。
with open('aa.gif', 'rb') as f:
with open('aa_copy.gif', 'wb') as w:
for line in f.readlines():
w.write(line)
print('图片拷贝完成')
Python中,一切皆对象,对象本质上就是一个“存储数据的内存块”。有时候,我们需要将“内存块的数据”保存到硬盘上,或者通过网络传输到其他的计算机上。这时候,就需要“对象的序列化和反序列化”。 对象的序列化机制广泛的应用在分布式、并行系统上。序列化指的是:将对象转化成“串行化”数据形式,存储到硬盘或通过网络传输到其他地方。反序列化是指相反的过程,将读取到的“串行化数据”转化成对象。
我们可以使用 pickle 模块中的函数,实现序列化和反序列操作。
序列化和反序列化使用:
pickle.dump(obj, file) obj 就是要被序列化的对象,file 指的是存储的文件
pickle.load(file) 从file 读取数据,反序列化成对象
import pickle with open(r"d:\data.dat","wb") as f:
a1 = "高淇"
a2 = 234
a3 = [20,30,40]
pickle.dump(a1,f)
pickle.dump(a2, f)
pickle.dump(a3, f)
#将获得的数据反序列化成对象
import pickle with open(r"d:\data.dat","rb") as f:
a1 = pickle.load(f)
a2 = pickle.load(f)
a3 = pickle.load(f)
print(a1)
print(a2)
print(a3)
运行结果:
高淇
234
[20, 30, 40]
csv是逗号分隔符文本格式,常用于数据交换、Excel文件和数据库数据的导入和导出。与Excel 文件不同,
CSV 文件中:
csv.reader对象和csv文件读取
csv.reader对象于从csv文件读取数据
import csv
with open(r"d:\a.csv") as a:
a_csv = csv.reader(a)
# 创 建 c s v 对 象,它 是 一 个 包 含 所 有 数 据 的 列 表 , 每 一 行 为 一 个 元 素
headers = next(a_csv)
# 获 得 列 表 对 象 , 包 含 标 题 行 的 信 息
print(headers)
for row in a_csv:
# 循 环 打 印 各 行 内 容
print(row)
csv.writer对象和csv文件写入
import csv
headers = ["工号","姓名","年龄","地址","月薪"]
rows = [("1001","高淇",18,"西三旗1号院","50000"),("1002","高八",19,"西三旗1号院","30000")]
with open(r"d:\b.csv","w") as b:
b_csv = csv.writer(b) # 创 建 c s v 对 象
b_csv.writerow(headers) # 写 入 一 行 ( 标 题 )
b_csv.writerows(rows) # 写 入 多 行 ( 数 据 )
os.path模块提供了目录相关(路径判断、路径切分、路径连接、文件夹遍历)的操作
# 测 试 o s.p a t h 常 用 方 法
import os
import os.path
print(os.path.isabs("d:/a.txt"))# 是 否 绝 对 路 径
print(os.path.isdir("d:/a.txt"))# 是 否 目 录
print(os.path.isfile("d:/a.txt"))# 是 否 文 件
print(os.path.exists("a.txt"))# 文 件 是 否 存 在
print(os.path.getsize("a.txt"))# 文 件 大 小
print(os.path.abspath("a.txt"))# 输 出 绝 对 路 径
print(os.path.dirname("d:/a.txt"))# 输 出 所 在 目 录
print(os.path.getctime("a.txt"))# 返 回 创 建 时 间
print(os.path.getatime("a.txt"))# 返 回 最 后 访 问 时 间
print(os.path.getmtime("a.txt"))# 返 回 最 后 修 改 时 间
path = os.path.abspath("a.txt")# 返 回 绝 对 路 径
print(os.path.split(path))# 返 回 元 组 : 目 录 、 文 件
print(os.path.splitext(path))# 返 回 元 组 : 路 径 、 扩 展 名
print(os.path.join("aa","bb","cc"))# 返 回 路 径 : a a / b b / c c