• Python——文件读取与写入


    一、文件打开方式

     

    打开方式

    指针位置

    读取的文件类型

    r

    只读(默认模式)

    指针在文件开头,文件不存在则报错

    1. 默认读取文件都是ASCII编码的文本文件

    2. 如果读取的文件是二进制文件,如图片,视频需要使用'rb'模式

    3. 读取非ASCII编码的文本文件,必须 以二进制模式打开,再解码

    f=open('E:/test.txt','rb')

    f.read().decode('gbk')

    rb

    二进制格式只读

    指针在文件开头,文件不存在则报错

    r+

    可读可写

    指针在文件开头,文件不存在则报错

    rb+

    二进制格式可读可写

    指针在文件开头,文件不存在则报错

    w

    只写

    文件存在,则覆盖;不存在,则创建

    wb

    二进制格式只写

    文件存在,则覆盖;不存在,则创建

    w+

    可读可写

    文件存在,则覆盖;不存在,则创建

    wb+

    二进制格式可读可写

    文件存在,则覆盖;不存在,则创建

    a

    追加

    文件存在,指针在文件尾增加;不存在,则创建

    ab

    二进制格式追加

    文件存在,指针在文件尾增加;不存在,则创建

    a+

    可读可写

    文件存在,指针在文件尾增加;不存在,则创建

    ab+_

    二进制格式可读可写

    文件存在,指针在文件尾增加;不存在,则创建

    二、文件打开方法

     

    举例

    文件不存在

    是否需要调用close()方法

    注意

    Python内置open函数

    f=open('E:/test.txt','r')

    文件不存在则会IOError

    必须书写调用close()

    1.文件对象会占用操作系统的资源,并且操作系统同一时间能打开的文件数量也有限

    2.当写文件时,操作系统不会立刻将数据写入磁盘,而是放内容缓存,空闲时再写入,只有调用close()方法时,操作数据才会将没有写入的数据写入磁盘。不写close()方法有可能只写了一部分数据到磁盘,剩下的数据丢失了

    3.文件不存在,可以用tryfinally避免,但与with比较麻烦

     

    With语句

    with open('E:/test.txt','r') as f:

    文件不存在则会IOError

    with语句自动调用close()方法

    三、文件读写定位操作

     

    方法

    用法

    注意

    f.read(size)

    如果没有size即f.read()一次性读取文件全部内容,返回类型str;如果有size即f.read(50)读取最多的字节内容

    1.文件很小,可一次性读取,文件较大,超过内存大小,内容爆掉

    2.文件过大,可用f.read(size),x为每次最多读取size字节的内容

    3.如果是配置文件,调用 readlines()最方便

    f.readline()

    每次读取一行内容,返回类型str

    f.readlines()

    一次读取所有内容并按行返回list

    f.write()

    写文件

    将字符串写入文件,如果写入结束,需要在字符串后面加上" "

    定位

    f.seek(offset,from_what)

    f.seek(2,0)读取位置向后移动2个字符

    from_what值为文件的开始位置,可以省略;offset为偏移量

    当前位置

    f.tell()

    f.tell(),返回当前文件位置

     

    四、读取非ASCII文件,如utf-8,gbk类型

    方法1:读取时指定类型encoding='utf-8'

    with open('E:/test1.txt','r',encoding='utf-8') as f

        print(f.read())

    结果:

    你好

    方法2:

    必须:1.以二进制模式打开,再解码

    codecs模块:读文件时自动转换编码,直接读出unicode

    import codecs

    with codecs.open('E:/test.txt','rb','utf-8') as f:

    f.read()

    注意:有些编码不规范,会遇到UnicodeDecodeError,可能文件中有些非法编码的字符,遇到这种情况,可用open()函数可以接收errors参数,表示如果遇到编码错误后如何 处理,最简单方式是直接忽略f=open('E:/test1.txt','r',encoding='gbk',errors='ignore')

    五、File对象的属性 

    f.closed

    文件已关闭返回true,否则返回false

    f.mode

    返回被打开文件的访问模式

    f.name

    返回文件名称

     

  • 相关阅读:
    hdu-1698(线段树,区间修改)
    hdu-1394(线段树)
    hdu-1166(线段树)
    hdu-1251(string+map)
    hdu-1711(kmp算法)
    hdu-2191(完全背包+二进制优化模板)
    hdu-2844(完全背包+二进制优化模板)
    hdu-1171(多重背包+二进制优化)
    SpringMVC 参数中接收数组、List写法
    如何高效的查询数组中是否包含某个值
  • 原文地址:https://www.cnblogs.com/yezishen/p/11783587.html
Copyright © 2020-2023  润新知