• python 读写文件


    https://www.cnblogs.com/evablogs/p/6725242.html

    文件的打开读写关闭(文件使用完毕后必须关闭,因为文件对象会占用操作系统的资源)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    #写文件
    with open(r'D:Test1.txt','w') as f:           #with比<strong>try....finally</strong>更加简洁,with自动调用close()方法;open(文件路径,读取方式),r:只读,默认打开方式
          f.write('Hello,world')                    #write(str):写入字符串;writelines():一次性写入多行
     
    #读文件
    with open(r'D:Test1.txt','r') as f:           #r:读
           print f.read()         #read([size]),size可选,指定读取的文件大小,单位是字节,默认读取全部,readline():读取一行;readlines([size]),读取返回一个列表,占内存空间
     
    >>> Hello,world
    1
    2
    3
    4
    5
    6
    >>> try:
           f=open(r'D:Test',r)
           print f.read()
        finally:
            if f:
                f.close()

    文件打开方式:

    +:同时读写,即可读又可写,边写边读、边读边写

    方式 说明 注意 是否清空文件 是否覆盖文件内容 文件不存在是否创建新文件
    ‘r’ 只读 文件不存在时报错 - -
    'r+' 读写 可读可写,文件不存在报错,写入时只覆盖写入文件的大小
    'w' 只写 可写方式打开,不可读 -
    'w+' 读写 可读可写 -
    'a' 追加

    文件已有的内容后追加内容,不可读

    'a+' 追加以及读 可读可追加,写入时,添加到文章末尾,并且指针位于添加后的末尾,所以再次读取会乱码,因为指针指向末尾,读取时实际上是跳过实际要读取的内容,去读取磁盘缓存的上一个文件缓存的内容,所以是乱码
    'rb','wb','ab','rb','wb+','ab+':二进制方式打开
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    >>> with open(r'D:Testa.txt','w') as f:
             f.write('Hello,world')
     
    >>>with open(r'D:Testa.txt','r') as f:
            print f.read()
     
    >>> Hello,world                                        #w写入
    >>> with open(r'D:Testa.txt','a') as f:              #追加,在后面添加内容
            f.write('Hello,world')
    >>> with open(r'D:Testa.txt','r') as f:
            print f.read()
    >>> Hello,worldHello,world
    >>> with open(r'D:Testa.txt','w') as f:              #清空前面的内容重新写入
             f.write('Hello,world')
     
    >>> Hello,world

    有关文件可能读取出乱码的问题:

    一:检查下文件的指针的指向,在写完之后,必须要seek(0),把文件指针重新指向文件开头,然后再读,否则就会从缓冲区读取一大堆乱码

    二:文件写入的操作先是在缓存中进行的,只有文件关闭才真正写入,因为read()似乎还是优先读取内存缓冲区。

    以上的两个问题涉及到文件指针的移动seek()以及刷新缓存flush()

    1
    2
    3
    4
    5
    6
    7
    8
    9
    >>> f=open(r'D:Testa.txt','w')
    >>> f.write('kkkkkkkk')                    #此时文件的指针=8,8个字节
    >>> f.flush()                              #刷新缓存,缓存中的内容刷新变成:kkkkkkkk[EOF],内容为空时:[EOF]
    >>> f.read()                               #此时的指针在文件尾[EOF]上,则输出的是''
    ''
    >>> f.seek(0)                              #将指针指向文件头,再进行文件内容的读取,就不会产生乱码
    >>> f.read()
    'kkkkkkkk'
    >>> f.close()

     

     产生乱码例子:

    1
    2
    3
    4
    >>> f=open(r'D:Testa.txt','w+')
    >>> f.write('uuuuuuuuuuuuuuuu')
    >>> f.read()                             #没有刷新缓存且将指针指向文件头,读取的是缓存中的其他乱码内容
    'x00x06x00x00x00@x00x00x00sbx00x00x00dx00x00Zx00x00dx01x00d.............................
  • 相关阅读:
    基于jQuery+JSON的省市联动效果
    根据IP定位用户所在城市信息
    BGP详解
    宜人贷系统架构——高并发下的进化之路
    2016年中国500强利润率最高的公司,中国500强最赚钱的40家公司,ROE最高的公司
    95,96开头的号
    Eclipse Mars: How to Stop Updating Error Reporting Database
    scp传入固件,sysupgrade xx.bin升级固件
    error opening registry key software/javasoft/java runtime environment
    亚洲最佳电影TOP100出炉 你看过几部?
  • 原文地址:https://www.cnblogs.com/yuer20180726/p/10790332.html
Copyright © 2020-2023  润新知