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

    文件操作的几种模式:

    打开文件的两种写法:

    1)需要操作完毕,手动关闭文件夹

    f=open("bixu.txt",mode="r+",encoding="utf-8")
    f.flush()  #刷新
    f.close()    #关闭文件夹

    2)不需要手动关闭文件夹

    def alex():
    with open("emp.db",mode="r",encoding="utf-8")as f,
            open("bixu_副本.txt",mode="w+",encoding="utf-8")as f1:
            str = f.readline()
            print(str)
            print(type(str))
            return #文件操作完毕了,直接结束函数
    r,r+,w,w+,a,a+,rb,wb,ab,r+b,w+b,a+b
    
    f.close()#关闭句柄
    
    f.flush()#刷新
    
    f.readlines() #读取全部,每一行是个字符串,最后返回到一个列表中
    
    f.readline()  #读取一行,返回个字符串
    
    tell()  ,print(f.tell())   #报告光标现在的位置
    
    truncate(n)  #截断,如果给参数,从头截断到参数位置
    
    seek(y,x)    #移动光标的方法,x有三个值,0,1,2,分别代表开头,现在位置,末尾;
    y代表的是移动多少字节符,一个中文3个字节符,英文都是1个

     

    r+ 模式下,如果读取了内容,不论读取内容多少,光标显示的是多少,在写入或着操作文件的时候都是在结尾进行的操作.!

    一.只读模式(r,rb)   #rb读出来的是bytes类型,再rb模式下,不能选择encoding

      1)read()  #全部读.  |  read(5)   #读取5个字符

    2)rb    #读取出来的内容是字节码串,此类后面跟b的模式,可以不指定打开文件的编码,但写文件的时候必须将字符串指定转化成uft-8/gbk模式字节码
     rb的作⽤: 在读取非⽂本⽂件的时候. 比如读取MP3. 图像. 视频等信息的时候就需要⽤到
     rb. 因为这种数据是没办法直接显⽰出来的.在后⾯我们⽂件上传下载的时候还会⽤到.我们看的直播. 实际上都是这种数据.

    .写模式(w,wb)     #如果没有文件,则会创建文件,如果文件存在,则将原文件内容删除,重新写入

        #wb模式下可以不指定打开文件的编码,但写文件的时候必须将字符串转化成为"utf-8"的bytes数据
    .追加(a,ab)          #如果没有,就创建文件夹,写入的内容会追加在文件的结尾

    .读写模式(r+,r+b)      #此模式必须是先读,后写入,因为光标默认在开头,读完了光标就到了文件末尾,写入才不会覆盖内容    

    五.写读(w+,w+b)  #先将所有内容清空,后写入,最后读取,如果不主动移动光标到头,就会为空

    六.追加读(a+)  #可创建文件夹,如果存在,追加写完,想读还允许移动光标读取,但是,不论读取内容多少,光标显示的是多少,想写入时,实际上都是在结尾进行的操作.!

    模式    描述
    t    文本模式 (默认)。
    x    写模式,新建一个文件,如果该文件已存在则会报错。
    b    二进制模式。
    +    打开一个文件进行更新(可读可写)。
    U    通用换行模式(不推荐)。
    r    以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
    rb    以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。
    r+    打开一个文件用于读写。文件指针将会放在文件的开头。
    rb+    以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。
    w    打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
    wb    以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
    w+    打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。
    wb+    以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。
    a    打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
    ab    以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。
    a+    打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
    ab+    以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。
    1
    file.close()
    关闭文件。关闭后文件不能再进行读写操作。
    
    2    
    file.flush()
    刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。
    
    3    
    file.fileno()
    返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。
    
    4    
    file.isatty()
    如果文件连接到一个终端设备返回 True,否则返回 False。
    
    5    
    file.next()
    返回文件下一行。
    
    6    
    file.read([size])
    从文件读取指定的字节数,如果未给定或为负则读取所有。
    
    7    
    file.readline([size])
    读取整行,包括 "
    " 字符。
    
    8    
    file.readlines([sizeint])
    读取所有行并返回列表,若给定sizeint>0,则是设置一次读多少字节,这是为了减轻读取压力。
    
    9    
    file.seek(offset[, whence])
    设置文件当前位置
    
    10    
    file.tell()
    返回文件当前位置。
    
    11    
    file.truncate([size])
    截取文件,截取的字节通过size指定,默认为当前文件位置。
    
    12    
    file.write(str)
    将字符串写入文件,返回的是写入的字符长度。
    
    13    
    file.writelines(sequence)
    向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。

    .其他操作:

    seek(y,x)    #移动光标的方法,x有三个值,0,1,2,分别代表开头,现在位置,末尾;
    y代表的是移动多少字节符,一个中文3个字节符,英文都是1个
    
    tell()  ,print(f.tell())        #查看光标现在的位置
    
    truncate()  #截断文件
    
    lst.encode("utf-8")    #编码
    
    lst.decode("utf-8")    #解码  注意:用什么码编的,就用什么码解,不然会乱码

     

    八.覆盖(修改)文件

    import os 
    with open("⼩小娃娃", mode="r", encoding="utf-8") as f1,
            open("⼩小娃娃_new", mode="w", encoding="UTF-8") as f2:    
        for line in f1:
            new_line = line.replace("⼤大⽩白梨梨", "冰糖葫芦")                
            f2.write(new_line) #因为用的是with操作,所以不用自己关
    os.remove("⼩小娃娃")    # 删除源⽂文件 
    os.rename("⼩小娃娃_new", "⼩小娃娃")     # 重命名新⽂文  

    九,相对路径和绝对路径:

    相对路径:相对于当前程序所在的文件夹, 如果再文件夹内. 随便找. 直接写名字

      如果不在这个文件夹内. 可能需要出文件夹或者进文件夹

        出文件夹  ../

        进文件夹  文件夹/

    绝对路径:从磁盘根目录寻找路径,一般只有在记录日志的时候可以用到绝对路径

    十、文件操作的补充.

    dirs = "C:\register作业"  #这个是你想在C盘创建的文件夹名字
    if not os.path.exists(dirs):  #让系统判断,是否存在这样的文件夹名字,不存在就执行下面段代码
        os.makedirs(dirs)  #创建文件夹

                                                                                                                                                                           

  • 相关阅读:
    【iCore3 双核心板】例程二十四:LAN_DHCP实验——动态分配IP地址
    【iCore3 双核心板】例程二十三:LAN_HTTP实验——网页服务器
    【iCore3 双核心板】例程二十二:LAN_UDP实验——以太网数据传输
    【iCore3 双核心板】例程二十一:LAN_TCPS实验——以太网数据传输
    【iCore3 双核心板】例程二十:LAN_TCPC实验——以太网数据传输
    【iCore3 双核心板】例程十九:USBD_MSC实验——虚拟U盘
    【iCore3 双核心板】例程十八:USB_VCP实验——虚拟串口
    【iCore3 双核心板】例程十七:USB_MSC实验——读/写U盘(大容量存储器)
    【iCore3 双核心板】例程十六:USB_HID实验——双向数据传输
    【iCore3 双核心板】例程十五:USB_CDC实验——高速数据传输
  • 原文地址:https://www.cnblogs.com/lgw1171435560/p/10073932.html
Copyright © 2011-2022 走看看