• python 基础 3.1 打开文件 a a+ r+ w+ 详解


     
    一.python 访问文件
     
    1.在python中要访问文件,首先要打开文件,也就是open
    ---open
      r:  只读
      w:  只写 ,文件已存在则清空,不存在则创建
      a:追加 ,写到文件末尾。如果文件存在,则在文件最后去追加。文件不存在就  
            去创建
      +-:更新(可读可写)
     
    2.排除文件的错误打开方式
    1》r, r+
    r 只读
    r+读写,不创建
     
    r+:读写,不创建
    with open(r'C:UserslzcDesktop234.txt','r+') as fd:
        fd.write('oooo mmmm ppppp')
    >>> 应用r+读写模式打开文件,函数fd.write()可以把内容写到文件中
     
     
    2》w,w+
    w新建只写,w+ 新建读写 : 二者都会将文件内容清零(以w打开方式,不能读出,w+可读写)
     
    w:只写不可读,文件存在。当读取一个文件时报错
    with open(r'C:UserslzcDesktop234.txt','w') as fd:
        fd.read()
     
    >>> line 48, in <module>
        fd.read()
    IOError: File not open for reading
     
     
    w+:可读写,文件存在。但是会把原文件清零
    with open(r'C:UserslzcDesktop234.txt','w+') as fd:
        fd.read()
    >>> 应用w+ 打开文件,函数fd.read()可以读出文件内容,但是都会先清零,所以不会显示文件内容
     
     
    3》w+ 与 r+ 区别:
    r+: 可读可写,若文件不存在,报错
    w+:可读可写,若文件不存在,创建
     
    4》r+ 与 a+ 区别:
    #r+ 与 a+ 区别
    with open(r'C:UserslzcDesktop234.txt','w+') as fd:
        fd.write('1111111 ')
    with open(r'C:UserslzcDesktop234.txt','r+') as fd:
        fd.write('222222 ')
    with open(r'C:UserslzcDesktop234.txt','a+') as fd:
        fd.write('333333 ')
     
    >>>  222222
         333333
    说明,r+ 是覆盖写了。
     
     
    4》不可读的打开方式:w和a
       若不存在会创建新文件的打开方式:a , a+ ,w, w+
     
    #不可读的打开方式w和a
    fd = open(r'C:UserslzcDesktop234.txt','w')
    print fd.read()
    >>> IOError: File not open for reading
     
    fd = open(r'C:UserslzcDesktop234.txt','a')
    print fd.read()
    >>> IOError: File not open for reading
     
    #以正确的方式打开,出现乱码 w+  a+
    fd = open('9.txt','a+')
    fd.write('vvvvv bbbbb ')
    fd.read()
    fd.close()
     
    >>>
     
    原因分析:指针问题。open() 以a+ 模式开启了一个附件读写模式的文件,由于是a,所以指针在文件末尾。此时如果做read(),则python发现指针位置就是EOF,读取到空字符串。在写入“vvvvbbbb”之后,指针的位置是9,仍然是我呢见尾,文件在内存中是vvvvbbbb[EOF]。但看起来read()的时候,python仍然去试图在读磁盘上的文件。将指针从我文件头向后跳3,再去读取到EOF为止。也就是说,你实际上是跳过了该文件真正的EOF,为硬盘底层的数据做了一个dump,一直dump到了一个从前存盘文件的EOF为止。所以最后得到了一些根本不期待的随机乱字符,而不是编码问题造成的乱码。
     
    解决方法:读取之前将指针重置为文件头(如果读取之后重置在读,无效。)
     
    fd = open('9.txt','a+')
    fd.seek(0)
    # fd.read()
    fd.write('vvvvv bbbbb ')
    fd.close()
     
    >>>
     
    # "w+" 清楚文件内容后再重新写入
    fd = open('9.txt','w+')
    fd.write('789')
    fd.flush()
    fd.read()
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
  • 相关阅读:
    真的是最后一次作业了!!!!
    最后一次总结
    作业十一总结?
    作业十一总结
    实验十总结
    作业9总结
    附加作业
    补交第十次作业
    补交第九次作业
    补交第八次作业
  • 原文地址:https://www.cnblogs.com/lzcys8868/p/7742993.html
Copyright © 2020-2023  润新知