

# 写文件--开始 f=open('test','w',encoding="utf-8") #如果有则写,没有就创建 print(f.writable()) #True f.write('11111\n'); f.writelines(['22222\n','223333\n']); f.write('33333\n'); f.close(); # 写文件--结束 # 读取文件--开始 f=open('test',encoding="utf-8") # data=f.read(); # print(data); print(f.readable()) print(f.readline()) #一次读一行 print(f.readlines()) #一次所有行 f.close(); # 读取文件--结束 # 追加文件--开始 在光标处追加 f=open('test','r+',encoding="utf-8") print(f.writable()) #True f.write('一\n'); f.writelines(['二\n','223333\n']); f.write('三\n'); f.close(); # 追加文件--结束 # 追加文件--开始 在光标处追加 f=open('test','a',encoding="utf-8") print(f.writable()) #True f.write('在结尾追加\n'); f.writelines(['在结尾追加2\n','在结尾追加3\n']); f.close(); # 追加文件--结束 """输出结果 一 二 223333 三 3333 在结尾追加 在结尾追加2 在结尾追加3 """


# 文件处理b模式 #读取文件 f=open("test",'rb');# 注意,通过二进制代开文件不用指定编码 data = f.read().decode("utf-8");#但是读取的时候需要指定解码方式 print(data) f.close() #写入文件 f=open("test",'wb');# 注意,通过二进制代开文件不用指定编码 f.write("张三\n".encode("utf-8")) f.close(); #追加文件 f=open("test",'ab');# 注意,通过二进制代开文件不用指定编码 f.write("李四\n".encode("utf-8")) f.close();


# 读取文件最后一行 f=open("test",'rb');# 注意,通过二进制代开文件不用指定编码 for i in f: # 设置一个偏移量,offSet、 offset=-10; while True: # 通过seek(偏移量,2);的方式来倒着获取光标位置 f.seek(offset,2) # 从光标位置开始读取数据 data=f.readlines(); if len(data)>1: print(data[-1].decode('utf-8')); break; offset *=2


with open('test','r',encoding="utf-8") as a,open('test2','w',encoding="utf-8") as b: b.write(a.read())
练习:文件的修改


古诗几首
作者:李白
题目《将进酒》
题目《早发白帝城》
作者:杜甫
题目《登高》
题目《兵车行》


#基本功能,实现对文件的增删改查 msg="""1:查询,2:新增 3:修改,4:删除""" #查询功能,根据输入的作者名称,查询该作者的作品 def query(author): print('查询作者是:\033[1;43m%s\033[0m' %author) query_data='作者:%s'%author query_Result=[] #记录查询结果 with open('古诗几首','r',encoding="utf-8") as read_f: tag=False for read_line in read_f: if read_line.strip()==query_data: tag = True continue elif read_line.strip()=="" and tag: tag = False break if tag: print(read_line,end="") query_Result.append(read_line) return query_Result def add(): print("这是新增功能") def dele(): print("这是删除功能") #这是修改功能 #格式:修改需要提供一个list集合,包含两块内容\ # data=[{'作者':'李白','内容':'题目《将进酒》'},{'作者':'李白','内容':'题目《静夜思》'}] #修改之前,先判断文件是否存在 def modify(data): #把拿到的data数据由字符串转换成列表 data=eval(data) #拿到作者名称,调用Query方法,返回list集合 article_list=query(data[0]["作者"]) if not article_list : print('输入的作者不存在') return "输入的作者不存在" else: # 遍历得到的list集合,然后如果看看题目是否存在 currentArticle= " "+data[0]["内容"]+"\n" if currentArticle not in article_list: print('输入的作品不存在') return '输入的作品不存在' else: #如果输入的作品存在 with open('古诗几首', 'r', encoding="utf-8") as read_f, \ open('古诗几首_新', 'w', encoding="utf-8") as write_f: # 遍历文件。如果不是当前行,直接复制,如果是当前行,复制修改后的 for curLine in read_f: if curLine.strip()!=currentArticle.strip(): write_f.write(curLine) else: currentArticlenew=" "+data[1]["内容"]+"\n" write_f.write(currentArticlenew) print("修改完成") dic_oper={'1':query,'2':add,'3':modify,'4':dele,} if __name__=='__main__': while True: print(msg) choice=input('请输入您的选项').strip() if not choice:continue if choice=="5":break data=input('请输入您的数据').strip() dic_oper[choice](data)