一。Python语言读写文件的函数
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
mode的几个参数:
r 只能读 r+ 可读可写 从顶部开始写,覆盖之前位置的内容 不创建不存在文件 rb 读取二进制文件 不创建不存在文件 w 写 不创建不存在文件 文件存在则,覆盖之前文件 w+ 可读可写 创建不存在文件 文件存在则,覆盖之前文件 wb 写入二进制文件 创建不存在文件 文件存在则,覆盖之前文件 a 从底部开始添加内容 创建不存在文件 a+ 可读可写 从文件顶部读取,从文件底部写入 创建不存在文件
ps:w+ a+ 必须在写入数据后,使用seek(0)将光标移动到开头,否则无法读取全部数据
下面来具体的代码感受下:
f=open('text2.txt',mode='w+',encoding='UTF-8')
f.write('创建了text2文件') #文件不存在,创建
f.seek(0) #定位光标到文件开头
print(f.read()) #读取全部内容
f.close()
f=open('text2.txt',mode='w+',encoding='UTF-8')
f.write('更改') #文件存在,覆盖文件
print(f.read())
f.close()
f=open('text.txt',mode='r',encoding='UTF-8')
print(f.read()) #读取文件
f.close()
f=open('text.txt',mode='r+',encoding='UTF-8')
f.write('青岛') #文件存在,覆盖之前位置的内容
print(f.read()) #读取文件
f.close()
f=open('text.txt',mode='a',encoding='UTF-8')
f.write('\n谢谢观赏')#底部添加
f.close()
f=open('text.txt',mode='a+',encoding='UTF-8')
f.write('\n2018年儿童节')#底部添加
print(f.read()) #从顶部读取
f.close()
file的方法:
read(size) 有参数则为读取size个字节,无参数则读取所有内容
readline(size) 读取一行
tell() 返回当前标记位置,以文件开头为原点
seek(offset[,whence])
writelines(seq) 迭代字符串序列添加
具体代码:
f=open('text.txt',mode='a+',encoding='UTF-8')
str=['啥家庭啊\n','开开心心']
f.writelines(str)
f.seek(0)
print(f.readline().rstrip()) #读取一行
print(f.tell())
f.close()
二。操作文件
Python os 模块提供了非常丰富的方法用来处理文件和目录
mkdir() 创建目录
rmdir() 移除目录
remove() 移除文件
rename() 修改文件或目录名
listdir()返回当前文件夹所有文件的名字组成的列表
getcwd() 返回当前所在路径
话不多说。代码如下:
import os
os.mkdir('test') #创建目录
os.rename('aaa.txt','demo1.txt') #修改文件或目录名
os.remove('ccc.txt') #移除文件
print(os.getcwd()) #返回当前路径
print(os.listdir()) #返回当前位置所有文件的名字,组装为列表
os.rmdir('demo') #删除目录
三。Python序列化和反序列化
在Python中,序列化和反序列化是通过“Pickle”库实现的。
Pickle有两个主要的方法。第一个是将对象放到文件中的转储。第二种方法是从文件对象加载对象的加载。
Pickle必须在二进制模式下使用,否则会造成文件数据的破坏
pickle.dump(data,file) 将数据data序列化到file文件流中
pickle.load(file) 读取流对象缓冲区数据,并实例化为新的数据对象返回
代码实现:
import pickle
data={'a':[1,2,3],
'b':'bb','c':None}
#序列化
with open('ccc.txt','wb') as f: #使用with 可以让file自动关闭
pickle.dump(data, f) #将字典序列化保存到ccc.txt中
# 反序列化
with open('ccc.txt','rb') as f:
print(pickle.load(f))
pickle.dump()和pickle.load()循环形成了与原始数据结构相同的新数据结构。