标签:pickle序列化 name 文件的 lse error 英文 解码 文本 try
python文件操作
目录:
1.文件读写 #文件两种类型(文本、二进制)
读写文本文件:read 全部读出,read(n) 一次读n w:写 r:读
读写二进制文件(案例:读取图片、视频拷贝(边读边写)):rb 读 、wb 写、ab 追加
2.文件与目录的操作(os、shutil模块)
查看当前目录:os.getcwd()
切换目录:os.chdir()
显示当前目录下的内容:os.listdir()
判断是目录还是文件:目录:os.path.isdir 文件:os.path.isfile
新建目录:新建多级目录:os.makedirs 新建单个目录:os.mkdir
删除目录:os.rmdir #只能删除空目录 shutil.rmtree:删除目录(包括非空目录)
移动文件:shutil.move
复制文件:shutil.copy #只复制文件内容 shutil.copy2 #复制文件所有,包括修改的时间等
3.文件序列化(pickle、shelve、json模块)
1.文件读写
1.1读写文本文件
#文本文件读写 #文件写w: import os with open("1.txt","w") as f: #文件名可写相对路径,也可写绝对路径;在当前文件下创建了1.txt f.write("胜多负少") f.write("12365") ##python写文件时默认按自身的操作系统编码,中文———GBK 英文————utf-8 f.write("fsfsdf") with open("2.txt","w",encoding="utf-8") as f: #编码:以ANSI格式编码(默认) f.write("胜多负少\n") f.write("12365\n") f.write("fsfsdf\n") #文件读r: with open("2.txt","r",encoding="utf-8") as f: txt=f.read(2) #一次读2个字符,默认全读 print(txt) t2=f.read() #会接着上面读过的位置开始往下读 print(t2) with open("2.txt","r",encoding="utf-8") as f: t3=f.readlines() #readlines()按行读取,读取完以列表的形式显示 print(t3) with open("2.txt","r",encoding="utf-8") as f: t4=f.readline() #readline()按行读取,一次读取一行 print(t4) #文件追加a: with open("2.txt","a",encoding="utf-8") as f: f.write("胜多负少\n") f.write("12365\n") f.write("fsfsdf\n") with open("2.txt",encoding="utf-8") as f: while True: #循环遍历出文件内容,一次读取一行 txt=f.readline() if txt: #读取的文件不为空继续打印,当读取的内容为空时(即为假),跳出循环 print(txt) else: break
1.2读写二进制文件
#二进制文件操作 print("1.读写二进制文件") """ with open("1.jpg",‘rb‘) as f: #读取图片 t=f.read(3) #分析图片的二进制格式(用二进制工具打开),可以看到,jpg图片的标识头为:ffd8ff if t==b‘\xff\xd8\xff‘: print("这是一个图片") print(t,type(t)) with open("1.jpg",‘rb‘) as f: t=f.read() with open("2.jpg","wb") as f: f.write(t) """ #视频拷贝(边读边写) with open("1.mp4","rb") as f: with open("2.mp4","ab") as f2: while True: txt=f.read(1024) if txt: f2.write(txt) else: print("文件拷贝完毕!") break
2.文件与目录的操作(os、shutil模块)
#python 文件与目录操作 import os,shutil print("查看当前目录:") print(os.getcwd()) print("切换目录:") os.chdir("F:\\pythonstudy") print(os.getcwd()) print("显示当前目录下的内容:") print(os.listdir()) #显示当面目录下的所有文件,以列表的形式显示 print(os.listdir("F:\\pythonstudy\\lesson7")) #显示指定目录下的内容 print("判断是目录还是文件:") #返回True或者False print(os.path.isdir("lesson7")) print(os.path.isfile("lesson7\\1.txt")) print(os.path.isdir("lesson7\\1.txt")) #新建目录mkdir/makedirs: print("创建目录mkdir/makedirs:") #os.mkdir("999") #mkdir创建单个目录 #os.makedirs("888/666/22") #makedirs创建多级目录 #删除目录 #os.rmdir("999") #rmdir只能删除空目录 #shutil.rmtree("888") #rmtree可以删除非空目录 #删除文件 #os.remove("ss.txt") #移动文件 #shutil.move("dd.txt","F:\\pythonstudy\\lesson7") #shutil.move("1.jpg","2.jpg") #改名 #复制文件 print(os.chdir("F:\\pythonstudy\\lesson7")) shutil.copy("dd.txt","ff.txt") shutil.copy2("dd.txt","mm.txt") #组合路径 path="F:\\pythonstudy\\lesson7" f="1.jpg" print(os.path.join(path,f)) #拆分路径 #以文件目录拆分(默认以最后一个"\\"分隔) print(os.path.split("F:\\pythonstudy\\lesson7\\1.jpg")) #以盘符进行拆分 print(os.path.splitdrive("F:\\pythonstudy\\lesson7\\1.jpg"))
3.文件序列化(pickle,shelve,json模块)
pickle:
只能用二进制读写,python下所有的类型都可存 缺点:只支持同版本,不能跨平台
pickle可以把对象以文件的形式存放在磁盘,
pickle模块只能在python中使用,python中几乎所有的数据类型(列表,字典,集合,类等)都可以用pickle来序列化。
pickle序列化后的数据,可读性差,人一般无法识别
pickle.dump(obj, file[, protocol]),序列化对象,并将结果数据流写入到文件对象中。参数protocol是序列化模式,默认值为0,表示以文本的形式序列化。 protocol的值还可以是1或2,表示以二进制的形式序列化。
pickle.load(file),反序列化对象。将文件中的数据解析为一个Python对象
import random import pickle """ #使用pickle模块将数据对象保存到文件 import pickle data1={‘a‘:[1,2.0,3,4], ‘b‘:(‘string‘,u‘sdfsf‘), ‘c‘:None} with open("data.pkl",‘wb‘) as f: pickle.dump(data1,f) #获取保存文件的内容 with open("data.pkl",‘rb‘) as f: b=pickle.load(f) print(b) """ """ print("1.pickle模块") try: with open("cjb","rb") as f: cjb=pickle.load(f) print("结果已加载") except FileNotFoundError: cjb=[] for i in range(5): name=input("name:") cj=random.randint(50,100) cjb.append([name,cj]) print(cjb) with open("cjb","wb") as f: pickle.dump(cjb,f) print("结果已保存") """
shelve:
在shelve模块中,key必须为字符串
pickle和json可以dump多次但只能load一次(因为先前的数据已经被后面dump的数据覆盖掉了),如果想要实现dump多次不被覆盖,就可以想到使用shelve模块
import shelve import datetime """ #数据存储(数据持久化) info = {‘name‘: ‘bigberg‘, ‘age‘: 22} name = [‘Apoll‘, ‘Zous‘, ‘Luna‘] t=datetime.datetime.now() with shelve.open(‘shelve.txt‘) as f: f[‘name‘]=name #持久化列表 f[‘info‘]=info #持久化字典 f[‘time‘]=t #持久化时间类型 """ #数据读取(get获取数据) with shelve.open("shelve.txt") as f: n=f.get(‘name‘) i=f.get(‘info‘) now=f.get(‘time‘) print(n) print(i) print(now) """
json:
将字符串形式的json数据转化为字典,也可以将Python中的字典数据转化为字符串形式的json数据
JSON的数据格式其实就是python里面的字典格式
json.dumps()把一个Python对象编码转换成Json字符串
json.loads()把Json格式字符串解码,转换成Python对象
元组(被转换成列表),集合不能被json序列化,所有key必须都是字符串(强行转,易失真);
转出来都是字符串;常用来处理字典
json处理整数、小数、字符
json处理元组,元组被转换为列表
json不能处理集合
json处理字典,字典的key会被转换为字符串
json.dump,json.load的用法
import json str1="安抚家属的快感的降幅高达" str2="123" str3=1.23 str4=[1,2,3] str5=(3,6,8) str6={"x":1,"y":2} str7={1:"a",2:"b"} """ with open("123.txt","w") as f: json.dump(str1,f) #汉字存储是以unicode编码存储 with open("123.txt") as f: print(json.load(f)) """ """ with open("123.txt","w") as f: json.dump(str2,f) with open("123.txt") as f: print(json.load(f)) """ with open("123.txt","w") as f: json.dump(str3,f) with open("123.txt") as f: print(json.load(f)) """
"""
with open("123.txt","w") as f:
json.dump(str5,f) #元组被序列化会被转成列表,然后存储
with open("123.txt") as f:
print(json.load(f)) #元组反序列化的结果是列表
"""
标签:pickle序列化 name 文件的 lse error 英文 解码 文本 try
原文地址:https://www.cnblogs.com/yuzly/p/10316385.html