zoukankan      html  css  js  c++  java
  • 文件操作

    参数

    f = open("aa",mode="r",encoding="utf-8")    
    #定义名 = open("文件名","模式",指定打开字符集方式)
    • f.name #查看db文件名
    • f.tell() 显示文件中,当前 光标位置
    • f.read() 读全部 (read是读字符 其他都是字节),f.read(5)读取5个字符
    • f.readline() 读一行 读取成列表形式
    • f.wirte() 写入
    • f.close() 关闭
    • f.seek(10) 移动10个字节 #f.seek(0,2)光标移动到最后操作 (对字节操作,utf-8中,汉字代表3个字节
    • f.encoding 查看字符编码
    • f.writable() 是否以写模式打开, #True为真 False为假
    • f.readable() 是否以读模式打开, #True为真 False为假
    • f.flush() 强制刷新到硬盘 #一般用于打印实时日志,基本不用,会导致硬盘速度变慢
     
    
    
    
    

    文件读取模式  

    f = open("aa",mode="r",encoding="utf-8")    
    #定义名 = open("文件名","模式",指定打开字符集方式)
     
    r  #读(指定文件名,需要手动创建文件) 
    
        先创建文件aa
        读取文件
        f = open("aa",mode="r",encoding="utf-8")    #默认是r 不加r也行
        f.read() #读取文件到内存
        print(f.readline(),end="")        #end="" 替换
    (可改),效果:结尾不会换行了, 注:print参数结尾默认是
    ,
        print(f.writable())                 #是否以写模式打开, #True为真 False为假 print(f.readable())                 #是否以读模式打开, #True为真 False为假
        f.close() #结束
         
        #读取文件4个字符,
    也算字符
        with open("aa","r",encoding="utf-8")as f :print(f.read(4))
    
    w    #写(没文件则创建,已有文件则清空并写入文件内容 )
    
        f = open("aa",mode="w",encoding="utf-8")
        #lyric是操作文件. mode="w" 写入模式 模式可替换. encoding="utf-8" 用utf-8格式打开lyric文件,
         
        f.write("wirte one work...
    ") #
     换行 write是写入参数
        f.write ("wirte seven eight nine ten
    ")
        f.close() #结束
         
        -------------------------------------------------------------------
        rs = ["aa","bb","cc"]
        f = open("lyric","w") #打开lyric的写功能(lyric文件存在,则清空数据)
        for i in rs: #i是rs(内存中黑名单的元素)
        f.write(str(i)+"
    ") #f.write 写入数据 str(i)+"
    " 写入i的每个值到lyric中,
    另起一行
        f.close() #文件结束
    
    a  #追加(没文件则创建,已有文件则追加文件内容)
    
        f = open("a1a1",mode="a",encoding="utf-8")
        #aa是操作文件. mode="w" 写入模式 模式可替换. encoding="utf-8" 用utf-8格式打开lyric文件,
        f.write("wirte one work...
    ") #
     换行
        f.write ("wirte seven eight nine ten
    ")
        f.close() #结束
    
    #"+" 表示可以同时读写某个文件
    
    r+  #先读,后追加 #可以指定长度修改
    
    w+  #先清空+,后追加
    
    a+  #先追加,后读取
    
     
    
    #U表示 将
        
        
    自动转换成
      (windows中换行是
          linux中换行是
     
    
    rU  #r和U的组合
    
    r+U #r+和U的组合
    
     
    
    #b表示 处理二进制文件,对所有文件都能读取
    
    rb 以2进制模式打开文件,不能声明encoding(不能指定字符类型,默认是二进制格式)
    
        #with...as... 优点:读取完文件自动关闭
        with open("aa","rb")as f :
        print(f.read().decode("utf-8"))    #decode 转成**模式显示
    
    
    
    wb   以二进制写入文件,必须写入bytes格式
    
        f = open("111","wb")                   #111是文件
        f.write("guo 1 哈哈".encode("utf-8")) #写入时必须指定写入的编码类型
        print(f)
        f.close()
    
    ab  以二进制追加文件,必须写入bytes格式
    
        f = open("111","ab")                        #111是文件
        f.write("guo 1 哈哈
    ".encode("utf-8"))     #追加时必须指定写入的编码类型
        print(f)
        f.close()
    
     
    
    rb+  #以二进制形式先读,后追加 #可以指定长度修改
    
    wb+  #以二进制形式先清空+,后追加
    
    ab+  #以二进制形式先追加,后读取

    文件两种修改方式

        模式1
    
    #读取文件修改后,保存到内存,再覆盖原文件 #弊端占内存,优点省硬盘空间 #文件lyric手动创建,写内容(文件包含aa) f = open("lyric",mode="r",encoding="utf-8") #定义变量f=打开lyric文件,模式:"读",encoding="utf-8"访问文件编码 data = f.read() #定义变量data为读取文件内容 data = data.replace("aa","bb") #replace文件替换, aa全部替换为bb f.close() #读模式结束 f=open("lyric",mode="w",encoding="utf-8") #定义变量f=打开lyric文件,模式:"写",encoding="utf-8"访问文件编码 f.write(data) #内存文件内容,写入到文件(原文件清空) f.close() #写模式结束 模式2
       #f文件每读一行并修改后,写入到f_new文件 #弊端占硬盘空间,优点省内存空间 import os #工具箱 f = open("lyric",mode="r",encoding="utf-8") #定义变量f=打开lyric文件,模式:"读",encoding="utf-8"访问文件编码 f_new= open("lyric_new",mode="w",encoding="utf-8") #定义变量f_new=打开lyric_new文件,模式:"写",encoding="utf-8"访问文件编码 for line in f: if "aa" in line: line = line.replace("aa","bb") #replace文件替换, aa全部替换为bb f_new.write(line) f.close() #读模式结束 f_new.close() #写模式结束 os.remove("lyric") #删除lyric文件 os.rename("lyric_new","lyric") #lyric_new改名为lyric
     
        #读取aa和bb文件操作
    
            读取aa和bb文件
            with open("aa","r",encoding="utf-8") as f_aa, open("bb") as f_bb:
            print(f_aa.read())
            print(f_bb.read())
    
        读取aa文件写入到bb
    
            with open("aa","r",encoding="utf-8") as f_aa, open("bb","w",encoding="utf-8") as f_bb:
            tow_f=f_aa.read()
            f_bb.write(tow_f)
    
        读取aa文件追加到bb
    
            with open("aa","r",encoding="utf-8") as f_aa, open("bb","a",encoding="utf-8") as f_bb:
            tow_f=f_aa.read()
            f_bb.write(tow_f)
    
     

    2个文件转列表,转字典,转成列表中的N个字典

        #db文件格式
        #aa
        #bb
        #cc
        #读取db文件生成列表
        goods =[]
        for gn in open("goods","rt",encoding="utf-8"):
        goods.extend(gn.strip().split())
        price =[]
        for en in open("price","rt",encoding="utf-8"):
        price.extend(en.strip().split())
        print(price)
        #2个列表合并成字典
        shop=dict(zip(goods,price))
        print(shop)
        #字典转成列表的子集添加n个字典
        test = []
        for k, v in shop.items():
        test.append({"name": k, "m": v})
        print(test)

    一个文件转成列表中的N个字典

        f2 = open('product', 'r', encoding='utf-8')
        product_data = f2.read()
        f2.close()
        v = product_data.split('
    ')
        print(v)
        # 将列表转换成字典
        lin = []
        for i in v:
        v1 = i.split(':')
        print(v1)
        v1[1] = int(v1[1])
        dic = {v1[0]:v1[1]}
        lin.append(dic)
        print(lin)
     

    光标问题

    cuisor读取光标地址, read读取文件全部内容, seek 把光标移动到某个字节后面
    
        f.seek(10) 代表移动10个字节(utf-8中,汉字代表3个字节)
    
         
        创建文件lyric,填写内容如下
    
        123456testABCDE
        my name is guolm
    
         
        python执行命令:
            >>>f = open("lyric","r",encoding="utf-8") #encoding 指定读取文件类型的格式
            >>>print('cuisor:',f.tell())         #f.tell()显示当前文件内光标位置,
            cuisor: 0
            >>>print(f.read())               #读取f变量中全部内容, 如果是print(f.readline()) 读取一行内容
            123456testABCDE my name is guolm
            >>>print("--------------------------------------")
            >>>print('cuisor:',f.tell())         #f.tell()再次执行,28是当前光标所在字符位置
            cuisor: 33
            >>>print(f.read())               #上次执行read()读取全部,本次读取文件从最后执行,所有没内容
            >>>print("--------------------------------------")
            >>>f.seek(10)                  #f.seek(10) 代表移动10个字节后面, f.seek(0)移动到开头 (utf-8中,汉字代表3个字节)
            >>>print("cursor:",f.tell())          #因为上边操作,光标从10字节之后,执行命令
            cursor: 10
            >>>print(f.read(5))              #读取5字符 注:汉字代表一个字符,每行的结尾(
    )也代表一个字符
            ABCDE
            >>>f.close()                  #文件结束
  • 相关阅读:
    Netty源码分析第6章(解码器)---->第3节: 行解码器
    Netty源码分析第6章(解码器)---->第2节: 固定长度解码器
    Netty源码分析第6章(解码器)---->第1节: ByteToMessageDecoder
    Netty源码分析第5章(ByteBuf)---->第10节: SocketChannel读取数据过程
    Netty源码分析第5章(ByteBuf)---->第9节: ByteBuf回收
    Netty源码分析第5章(ByteBuf)---->第8节: subPage级别的内存分配
    Netty源码分析第5章(ByteBuf)---->第7节: page级别的内存分配
    【转】关于Tomcat下项目线程启动两次的问题
    设计模式【单例模式】
    【SQL学习笔记】一、select语句
  • 原文地址:https://www.cnblogs.com/Gavinkwok/p/6856762.html
Copyright © 2011-2022 走看看