文件基础
一,文件处理流程
print("一,文件处理流程") ########################一,文件处理流程################################### ################1,打开文件############# # #open打开需要的文件,文件是什么编码的,必须要什么解码,是一个句柄,需要赋值给句柄 # #open:就是向操作系统拿那个文件的内存地址, # f=open("笑话.txt",encoding="gbk")#找的是系统的编码 # print(f)#F是一个内存地址 # ################2 通过句柄对文件进行操作############# # print(f.read())#read()就是执行读操作,读里面的内容给变量 # ################3 关闭文件############# # # 就是释放内存 # f.close()
二,文件打开模式
########################二,文件打开模式###################################
# 文件打开模式,有只读r,只写w,读写a
1,只读模式r,
print("1,只读模式r,只能读不能写") ################1,只读模式r############# # f=open('笑话.txt',"r",encoding="gbk") #------------------------------------ #是否为只读模式,返回Ture # print(f.readable()) #------------------------------------ #读一行文件一行 # 一行有个 \n去掉空白用end='' # 如果前面read(),那就表示内容读光了readline()就没有内容了 # print(f.readline(),end='') #------------------------------------ # print(f.readline()) # print(f.readline()) #------------------------------------ # 就是把文件以列表的形式读取出来,每行是一个字符串 # print(f.readlines()) #------------------------------------ # 就是把文件原来格式读取出来 # print(f.read()) # f.close()
2,只写模式w
print("2,只写模式w,只能写不能读,会把内容清空") ################2,只写模式w############# # f=open('只写模式.txt','w',encoding="utf-8") #------------------------------------ # 是不是只读模式 # f.writable() #------------------------------------ # 用字符串的模式写入文件 # f.write('11111\n2222222222222\n3333333\n') #------------------------------------ # 用字典的模式写入文件 # f.writelines(['55555\n','66666666666\n']) # f.close()
3,追加模式a
print("3,追加模式a,就是文件后面追加内容") ################3,追加模式a############# # f=open("只读模式.txt","a",encoding="utf8") #------------------------------------ # 用字符串的模式写入文件 # f.write('11111\n2222222222222\n3333333\n') #------------------------------------ # 用字典的模式写入文件 # f.writelines(['55555\n','66666666666\n']) # f.close()
4,文件修改
print("4,文件修改,就是覆盖") ################4,文件修改############# # 就是先读数据,放在内存,在把数据修改,用写的方式覆盖原来的内容,在放进硬盘 # f=open("只写模式.txt",'r',encoding="utf8") # data=f.read() # f.close() # if(data.find("丰富")): # data=data.replace("丰富","qyl",-1) # print(data) # f1=open("只写模式.txt",'w',encoding="gbk") # f1.write(data) # f1.close()
5,with打开文件
print("5,with打开文件") ################5,with打开文件############# # 相当于open('只写模式.txt','r',encoding="utf8") as f ,f.close() # with open('只写模式.txt','r',encoding="utf8") as f,\ # open('只写模式1.txt',"w",encoding="utf8") as f1: # data=f.read() # if(data.find("qyl")): # data=data.replace("qyl","丰富",-1) # f1.write(data)
6,读写模式r+
with open("只写模式.txt","r+",encoding="utf8") as f: # f.read() # f.writelines(["1121233\n",'552555555555\n'])#写入是按光标的地方开始写 # print(f.readlines())
7,字节形式读模式rb
with open("只写模式.txt",'rb') as f: # print(f.read().decode("utf8"))#因为打开的字节,说以需要对应的解码
8,字节形式写模式wb
# 字节写模式,需要用bytes('zifuchuan\n',encoding="编码模式") # with open('只写模式1.txt','wb') as f: # f.write(bytes('瞿婧琪\n',encoding="utf8")) # f.write('瞿玉林'.encode('utf8'))
9,字节形式写追追加模式ab
#############9,字节形式写模式ab############# # # 字节写追加模式,是在后面添加,需要用bytes('zifuchuan\n',encoding="编码模式") # with open('只写模式1.txt','ab') as f: # f.write(bytes('\n瞿婧琪\n',encoding="utf8")) # f.write('瞿玉林'.encode('utf8'))
########################三,文件的打开方法###################################
1,读方法
##############'1,读方法'############# # with open('只读模式.txt','r',encoding='utf8') as f: # print(f.readline(),end='')#一行一行读 # print(f.read(4))#以字符串的形式全部输出,4表示都4个字符 # print(f.readlines()) # 以列表的形式全部输出
2,写方法
##############'2,写方法'############# # with open('只写模式.txt', 'w', encoding='utf8') as f: # f.writelines(["222\n",'333\n']) # 以列表的形式写入 # f.write('4444\n55555\n') # 以字符串的形式写入
3,判断
##############'3,判断'############# # with open('只读模式.txt', 'r', encoding='utf8') as f: # print(f.closed)#判断文件是不是打开者 # print(f.readable())#判断文件是不是读模式 # print(f.writable())#判断文件是不是写模式
4,其他方法
##############'4,其他方法'############# # # newline = ""是叫python解释器读取真实的数据 # with open('只读模式.txt', 'rb') as f: # # 从0开始移动当前的光标的位置(以字节为单位) # #10表示从10位置开始移动光标 # f.seek(-1,2)#从结束开始倒叙 # #---------------------------------- # print(f.read()) # f.flush()#跟新就是把操作的从内存保存到硬盘中。 # print(f.name)#显示文件名 # print(f.tell())#读取现在光标的位置(以字节为单位) # # f.truncate(10)#就是截取一段,覆盖掉原文,就是写操作,所以不能是w,w+ 模式
5,循环方式
##############'5,循环方式'############# # with open("只读模式.txt",'r+',encoding="utf8",newline="") as f: # f.seek(0) # for data in f:#不要用f.read()这种,会把内容全部放入内存中 # print(data,end='')
########################四,文件的查询,修改###################################
知识点:状态变量,函数的解耦,__name__用法
import os print('文件的解藕') # 目的是把文件处理的提取出来放在一个函数里,需要的时候调用 def file_hendool(pp_data,type ='file_fetch',res=None): # 查询的文件处理调用 if type == 'file_fetch': res = [] zhuangdai = False#重要的知识点:就是给一个状态这个概念 with open('123.conf', 'r')as f: for file_data in f: if file_data.strip() == pp_data: zhuangdai = True if file_data.startswith('3') == True: break if zhuangdai: res.append(file_data) return res # 修改的文件处理调用 if type == 'file_revise': tag = False zhuangtai = False with open('123.conf', 'r') as red_f, open('123.conf1', 'w') as write_f: for r_data in red_f: if pp_data == r_data: tag = True zhuangtai = True continue if not tag: write_f.write(r_data) if tag and r_data.startswith("3"): write_f.write(r_data) tag = False else: if zhuangtai: for i in res: write_f.write(i) zhuangtai = False os.rename("123.conf",'123.conf.back') os.rename("123.conf1",'123.conf') os.remove('123.conf.back') print('一,文件的查询') def file_fetch(data): ############一,文件的查询############ pp_data = 'net.ipv4.tcp_tw_%s = 1' % data return file_hendool(pp_data) print('二,文件的增加') def file_add(): ############二,文件的增加############ print("二,文件的增加") print('三,文件的删除') def file_del(): ############三,文件的删除############ print("三,文件的删除") print('四,文件的修改') def file_revise(data): ############四,文件的修改############ #----------------挑出查询数据的字符串-------- lod_data=data[0]# # ['net.ipv4.tcp_tw_reuse = 1\n', '\tipv4 = 192.168.31.31\n', '\tsdd =255.255.255.0\n', '\twangduan= 192.168.31.1\n', '\n'] pp_data=lod_data[0]#'net.ipv4.tcp_tw_reuse = 1\n' cha_data=lod_data[0].split("_") cha_data=cha_data[2].split('=') cha_data=cha_data[0].strip() lod1_data=file_fetch(cha_data) new_data=data[1] if pp_data not in lod1_data or not lod1_data: print("没有要找到的数据") file_hendool(pp_data, type='file_revise', res=new_data)

浙公网安备 33010602011771号