文件基础

一,文件处理流程
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()
1,只读模式r,
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()
只写模式w
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()
3,追加模式a
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()
4,文件修改
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)
5,with打开文件

 6,读写模式r+

with open("只写模式.txt","r+",encoding="utf8") as f:
#             f.read()
#             f.writelines(["1121233\n",'552555555555\n'])#写入是按光标的地方开始写
#             print(f.readlines())
6,读写模式r+
7,字节形式读模式rb
with open("只写模式.txt",'rb') as f:
#             print(f.read().decode("utf8"))#因为打开的字节,说以需要对应的解码
7,字节形式读模式rb
8,字节形式写模式wb
# 字节写模式,需要用bytes('zifuchuan\n',encoding="编码模式")
#         with open('只写模式1.txt','wb') as f:
#             f.write(bytes('瞿婧琪\n',encoding="utf8"))
#             f.write('瞿玉林'.encode('utf8'))
8,字节形式写模式wb
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())  # 以列表的形式全部输出
1,读方法
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())#判断文件是不是写模式
3,判断
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+ 模式
4,其他方法
5,循环方式
##############'5,循环方式'#############
#         with open("只读模式.txt",'r+',encoding="utf8",newline="") as f:
#             f.seek(0)
#             for data in f:#不要用f.read()这种,会把内容全部放入内存中
#                 print(data,end='')
5,循环方式

 ########################四,文件的查询,修改###################################

知识点:状态变量,函数的解耦,__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)
状态变量,函数的解耦,__name__用法

 

posted @ 2022-05-20 22:32  quyulin  阅读(45)  评论(0)    收藏  举报