文本文件和二进制文件
1 文本文件:用来存储字符的文件,可以用记事本打开,默认使用unicode字符集,像word软件编辑的文档不是文本文件;
2 二进制文件:把数据内容用字节存储,无法用记事本打开,必须使用专用的软件解码,常见的有MP4,MP3,jpg等
python文件操作相关模块
创建文件对象 open()
结构:
open(文件名[,打开方式])
f
文本文件的写入
1 创建文件对象
2 写入数据
3 关闭文件对象
f = open("d:/a.txt", "a")
a = "123\n456\n789"
f.write(a)
f.close()
中文乱码问题
windows操作系统默认的编码是GBK,
python 默认的编码是unicode
在pycharm中打开python读写的文件,需要转成GBK编码
关闭流要点
1 try 异常机制
try:
f = open("a.txt", "a", encoding="utf-8")
a = "哈哈哈"
f.write(a)
f.close()
except BaseException as e:
print(e)
finally:
f.close()
2 with语句
不管什么原因跳出with块,都能确保文件正确的关闭
s = ["123\n", "456\n", "789\n"]
with open(r"b.txt", "a") as f:
f.writelines(s)
文本文件的读取
主要有三个方法:
1 read(size):
从文件中读取size个字符,并作为结果返回,如果没有size参数,则读取整个文件
2 readline()
读取一行内容,读取到文件末尾,会返回空字符串
3 readlines()
文本文件中,每一行作为一个字符串存入列表中,返回该列表
with open("e.txt", "r") as f:
str = f.read(3)
print(str)
with open("e.txt", "r") as f:
for a in f:
print(a,end="")
练习:文件读取后每行内容后面加行号:enumerate 函数
enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中。
with open("e.txt", "r") as f:
line = f.readlines()
c = [temp.rstrip() + "_" + str(index)+"\n" for index, temp in enumerate(line)] #推导式生成列表
print(c)
with open("f.txt", "w") as w:
w.writelines(c)
二进制文件读写
f = open(“e.doc”, “wb”) # 可写的,重写模式的二进制文件对象
f = open(“e.doc”, “ab”) # 可写的,追加模式的二进制文件对象
f = open(“e.doc”, “rb”) # 可读的二进制文件对象
# 文件拷贝
with open("123.png", "rb") as f:
with open("123_copy.png", "wb") as w:
for a in f.readlines():
w.write(a)
文件属性
seek 把文件指针移动到新的位置
seek(offset[,whence])
offset表示偏移量 ;
whence:0 从文件头开始计算,默认值;1 从当前文职开始计算;2 从文件尾开始计算
tell 返回文件指针的房钱文职
truncate:不管指针在什么位置,只留下前size个字节的内容
with open("e.txt","r") as f:
print(f.name)
print(f.closed)
print(f.tell())
print(f.seek(1,0))
序列化和反序列化
使用pickle模块中的函数,实现序列化和反序列的操作
序列化:将对象转换成串行化的数据形式,存储到硬盘活通过网络传输到其他地方;
pickle.dump(obj,file) obj 是要被序列化的对象,file指的是存储的文件
pickle.load(file) 从file读取数据,反序列化成对象
import pickle
#序列化
with open(r"data.dat", "wb") as f:
a1 = "美女"
a2 = 123
a3 = [20, 30, 40]
pickle.dump(a1, f)
pickle.dump(a2, f)
pickle.dump(a3, f)
# 反序列化
with open(r"data.dat", "rb") as f:
b1 = pickle.load(f);
b2 = pickle.load(f);
b3 = pickle.load(f)
print(b1);
print(b2);
print(b3)
csv 文件的读写
import csv
#读取
with open("data.csv", "r") as f:
a_csv = csv.reader(f)
# print(list(a_csv))
for a in list(a_csv):
print(a)
# 写入
with open("ee.csv", "w") as f:
b_csv = csv.writer(f)
b_csv.writerow(["id", "name", "age"])
b_csv.writerow(["1", "LiMing", 10])
c = [["2", "LiHua", 12], ["3", "Han", 11]]
b_csv.writerows(c)