zoukankan      html  css  js  c++  java
  • 04文件操作2(打开模式)

    1、普通打开模式

      1)r,英文:read,只读模式(默认)
      2)w,英文:write,只写模式(不可读,不存在则创建新文件,存在则删除内容)
      3)a,英文:append,追加模式(不可读,不存在则创建,存在则只追加内容

    In [4]:
    # r(读)
    filename = 'data\programming.txt'
    f = open(filename,'r')
    print(f.read())
    f.write('nihao')
    f.close()
    
     
    I love programming.
    I love creating new games.
    I also love finding meaning in large datasets.
    I love creating apps that can run in a browser.
    
    ---------------------------------------------------------------------------
    UnsupportedOperation                      Traceback (most recent call last)
    <ipython-input-4-08974b0db28e> in <module>
          3 f = open(filename,'r')
          4 print(f.read())
    ----> 5f.write('nihao')
          6 f.close()
    
    UnsupportedOperation: not writable

      注:读操作,只能是只读,不能写和追加

    In [7]:
    # w(写)
    f = open(filename,'w')
    f.write('nihaowohao')
    f.close()
    
     

    programming.txt

    nihaowohao

      注:写操作只能写,不能读和追加,而且写操作会重新创建一个文件,会覆盖之前的文件

    In [8]:
    # a(追加)
    f = open(filename,'a')
    f.write('caishizhenhao')
    f.close()
    
     

    programming.txt

    nihaowohaocaishizhenhao

      注:追加模式不可读,不存在则创建,存在则只追加内容

     

    2、同时读写模式

      1)r+,可读写文件(可读;可写;可追加,不存在文件则报错)
      2)w+,可写读文件(可读,可写,创建新文件)
      3)a+,可追加和读文件(可读,可追加,不存在则创建)

    In [19]:
    # r+(读写)
    f = open(filename, 'r+', encoding='utf-8')  # utf-8 才支持中文
    print(f.readline())
    print(f.tell())
    f.write('帅帅帅')
    f.seek(0) # 光标指针退到最开始的位置
    print(f.readline())
    f.close()
    nihaowohaocaishizhenhao
    23
    nihaowohaocaishizhenhao帅帅帅
    
    In [27]:
    # (写读)
    # 写读的功能是:创建新文件->写入文本->设置指针为开始位置(seek(0))->读取到文件内容
    f = open(filename,"w+",encoding="utf-8")
    print(f.read())
    f.write("qigao zui lang")
    f.seek(0)
    print(f.read())
    print(f.tell())
    f.write("qigao zui lang
    ")
    f.seek(0)
    print(f.read())
    f.close()
    
     
    qigao zui lang
    14
    qigao zui langqigao zui lang
    
    
    In [29]:
    # a+(追加和读)
    # 追加和读:追加读在写入文件时,不会清空之前的内容,而是在之前的内容的追加一行,读取文件内容,需要重新设置指针
    f = open(filename, "a+", encoding="utf-8")
    print("--------data1-----")
    print(f.read())  #没有设置指针
    print("--------data2-----")
    f.seek(0)
    print(f.read())  #设置指针
    f.write("qigao zui lang")
    print("---------data3----")
    print(f.read())  #写完以后没有设置指针
    print("--------data4-----")
    f.seek(0)
    print(f.read())  #写完以后设置指针
    f.close()
    
     
    --------data1-----
    
    --------data2-----
    qigao zui langqigao zui lang
    
    ---------data3----
    
    --------data4-----
    qigao zui langqigao zui lang
    qigao zui lang
    
     

    3、二进制打开模式

      1)rb,二进制读
      2)wb,二进制写
      3)ab,二进制追加
      这种打开模式就要注意了,这种是以二进制操作的,也就是说不管是是读,写,追加,都必须是二进制文件,也就是字节,而不是字符,需要解码以后才会生成字符。一般情况下跨平台的文件,视频文件等需要二进制模式操作。

    In [60]:
    # f = open(filename,'r+')
    # print(f.read())
    
    #二进制读取
    f = open(filename, "rb")
    
    f_read = f.read()
    f_read # 没有解码,读出来的是二进制,也就是字节码
    
    Out[60]:
    b'qigao zui langqigao zui lan
    '
    In [63]:
    f_read.decode()  # 解码后,是字符
    
    Out[63]:
    'qigao zui langqigao zui lan
    '
    In [76]:
    # wb(二进制写)
    f = open(filename, 'wb')
    str = '我最帅'
    en_str = str.encode()  # 写入文件,就需要编码,否则就会报错
    f.write(en_str)
    f.close()
    
    In [77]:
    f=open(filename,'r',encoding='utf-8')
    print(f.read())
    f.close()

    我最帅
    In [78]:
    # ab(二进制追加)
    f = open(filename, "ab")
    in_str = "gaoge,shuai de yibi"
    # 这边需要先编码,才能追加到文件中
    in_str = in_str.encode()
    
    f.write(in_str)
    f.close()
    
    In [79]:
    f = open(filename,'r',encoding='utf-8')
    print(f.read())
    f.close()

    我最帅gaoge,shuai de yibi
     

    总结:

      普通打开模式和二进制打开模式,只是在python 3中,二进制打开模式才做了字符和字节的编码和解码;然而在python 2中,字节和字符没有做明显的区别,所以在python 2中,二进制模式读取文件时,不需要做编码和转码的操作。

     
  • 相关阅读:
    $digest / $apply digest in progress报错
    get与post请求
    面试题(北京)
    Docker监控平台prometheus和grafana,监控redis,mysql,docker,服务器信息
    Zabbix系列优秀博文
    Docker安装Zabbix
    使用Docker部署监控系统,Prometheus,Grafana,监控服务器信息及Mysql
    docker镜像加速,docker更换为国内镜像
    记一次,Docker镜像1G多精简至300+M的过程
    docker通过dockerfile构建JDK最小镜像,Docker导出导入镜像
  • 原文地址:https://www.cnblogs.com/xinmomoyan/p/10821938.html
Copyright © 2011-2022 走看看