一、扁平文件 #以文本文件存储持久化对象 sorces=[88,99,77,55] def write_sorces(): with open('data_list.txt','w',encoding='utf8') as f: f.write(str(sorces)) print('文件写入完成')#本质是文本文件,与列表无关 #如果想要读取到程序里面来,并且还原类型 def read_scores(): with open('data_list.txt', 'r', encoding='utf8') as f: lst=eval(f.read())#eval能将括号里传递的字符串转换成python的表达式 lst[0]=99 print(lst) if __name__=='__main__': write_sorces() read_scores() 二、pickle的应用,更方便 import pickle person={'name':'Tom','age':20} s=pickle.dumps(person)#dumps是将括号里面传递过来的对象,不管什么类型,这里把字典表类型序列化成一个字符串 print(s) #还原 p=pickle.loads(s)#从字符串反序列化载入为原来的类型 print(p) #序列化保存为一个文件s'用dump,没有‘s' pickle.dump(person,open('pickle_db','wb'))#wb以二进制形式写入文件 p=pickle.load(open('pickle_db','rb')) print(p) #pickle的缺陷,在反序列化时,是将整个文件反序列化,所以如果是多个对象时,想要剥离某个对象时比较麻烦 三、shelve应用 #shelve可以将多个对象存贮在一个文件里面,主要形式通过键值来访问 import shelve scores=[99,88,77] student={'name':'mike','age':20} db=shelve.open('shelve_student') db['s']=student db['score']=sorces print(len(db)) temp_student=db['s'] print(temp_student) del db['s']#若想要删除一个,可以使用全局的函数del print(len(db)) #序列化自定义类的实例 import shelve class Student: def __init__(self,name,age): self.name=name self.age=age def __str__(self): return self.name def write_shelve(): s = Student('Tom', 20) db=shelve.open('shelve_student_db') db['s']=s db.close() def read_shelev(): db=shelve.open('shelve_student_db') st=db['s'] print(st) print(st.age) if __name__=='__main__': write_shelve() read_shelev() 四、字符的编码解码 # encode是编码 s='ABCD' s.encode('ASCII') print(s) s1='学习' print(s1.encode('utf-8')) print(s1.encode('utf-8')) print(s1) #decode把乱码解码 b=b'\xe5\xad\xa6\xe4\xb9\xa0' print(b.decode('utf8')) #在写入文件中是以gbk的形式,所以必要时要进行编码,不然文件出现乱码 open('data.txt','w',encoding='utf8').write('学编程 xuebiancheng.com') r=open('data.txt','r',encoding='utf8').read() open('data.txt','w').write('大学') r2=open('data.txt','r',encoding='gbk').read() print(r) print(r2) #BOM处理,字节顺序标记,用utf-8-sig进行忽略 bom=open('data.txt','r',encoding='utf-8-sig').read() print(bom)