zoukankan      html  css  js  c++  java
  • 6.1 文件对象常用方法与属性

      无论是文本文件还是二进制文件,其操作流程基本都是一致的,及首先打开文件并创建文件对象,然后通过该文件对象对文件内容进行读取、写入、删除、修改等操作;最后关闭并保存文件内容。Python内置了文件对象,通过open()函数即可以指定模式打开指定文件并创建文件对象,该函数用法为:

      open(file,mode='r',buffering=-1,encoding=None,errors=None,newline=None,closefd=True,opener=None)

      该函数的主要参数含义如下。

      (1)参数file指定要打开或创建的文件名称,如果该文件不在当前目录中,则需要指定完整路径,为了减少完整路径中“”符号的输入,可以使用原始字符串。

      (2)参数mode指定打开文件后的处理方式,如 只读、只写、读写、追加、二进制只读、二进制读写等,默认为文本只读模式。以不同方式打开文件时,文件指针的位置略有不同,例如,追加模式打开文件是则文件指针的处室位置为文件尾。

      (3)参数buffering指定读写文件的缓存模式,数值0(只在二进制模式中可以使用)表示不缓存,数值1(只在文本模式中可以用)表示使用行缓存模式,大于1的数字则表示缓冲区的大小,默认值是-1,表示二进制文件和非交互式文本文件以固定大小的块为缓存单位,等价于io.DEFAULT_BUFFER_SIZE,交互式文本文件(isatty()方法返回True)采用行缓存模式。

      (4)参数encoding指定对文本进行编码和解码的方式,只适用于文本模式,可以使用Python支持的任何格式,详见标准库codecs。

      (5)参数newline只适用于文本模式,取值可以是None、"、' '、' '、' ' 中的任何一个,表好似文件中新行的形式。

      如果执行正常,open()函数返回一个可迭代的文件对象,通过该文件对象可以对文件进行读写操作,如果指定文件不存在、访问权限不够、磁盘空间不够或其他原因导致创建文件对象失败则抛出异常。下面的代码分别以读、写方式打开了两个文件并创建了与之对应的文件对象。

        f1 = open('file1.txt','r')

        f2 = open('file2.txt','r')

      当对文件内容操作完以后,一定要关闭文件对象,这样才能保证所做的任何修改都确实被保存到文件中。

        f1.close()

      小提示:缓存机制使得修改文件时不需要频繁地进行磁盘文件的读写操作,而是等缓存满了以后再写入文件,或者调用flush()方法强行将缓存中的内容写入磁盘文件,缓冲机制大幅度提高了文件操作幅度,也延长了磁盘使用寿命。

      注意:即使我们写了关闭文件的代码,也无法保证文件一定能正常关闭,例如,在打开文件之后和关闭文件之前发生了错误导致程序崩溃。如果忘记了关闭文件或者关闭文件的代码没有得到执行会怎么样呢?如果以读模式打开的文件那一般没什么,但是如果以写模式或追加模式打开的文件对象,有可能会导致数据并没有真正写入磁盘文件。如果被水平超高的黑客盯上,还有可能会造成内存数据的泄露。

    模式 说明
    r 读模式(默认模式,可省略),如果文件不存在则抛出异常
    w 写模式,如果文件已存在,先清空原有内容
    x 写模式,创建新文件,如果文件已经存在则抛出异常
    a 追加模式,不覆盖文件中原有内容
    b 二进制模式(可与其他模式组合)
    t 文本模式(默认模式,可省略)
    + 读、写模式(可与其他模式组合使用)

      

      文件对象的常用属性如下表所示:

    属性 说明
    closed 判断文件是否关闭,若文件已关闭则返回True
    mode 返回文件的打开模式
    name 返回文件名称

      文件对象的常用方法如下表:特别说明的是,文件读写操作相关的函数都会自动改变文件指针位置。例如,以读模式打开一个文本文件,读取10个字符,会自动把文件指针移到第11个字符,再次读取字符的时候总是从文件指针的当前位置开始读取。写入文件的操作函数也具有相同的特点。

     

    方法 功能说明
    flush() 把缓冲区的内容写入文件,但不关闭文件
    close() 把缓冲区的内容写入文件,同时关闭文件,并释放文件对象
    read([size]) 从文件中读取size个字符的内容作为返回结果,如果省略size则表示读取所有内容
    readline() 从文本文件中读取一行内容作为结果返回
    readlines()

    把文本文件中每行文本作为一个字符串写入列表中,返回该列表

    seek(offset[,whence]) 把文件指针移到新的位置,offset表示相对于whence的位置。whence为0表示从文件头开始计算,1表示从当前位置开始计算,2表示从文件尾开始计算,默认为0
    tell() 返回文件指针的当前位置
    truncate([size]) 删除从当前指针位置到文件末尾的内容,如果指定了size,则不论指针在什么位置都只留下size个字节,其余删除
    write(s) 把字符串s的内容写入文件
    writelines(s) 把字符串列表写入文本文件,不添加换行符
    writable 测试当前文件是否可写
    readable 测试当前文件是否可读
  • 相关阅读:
    十,文献研读
    第十周博客作业
    【西北师大-2108Java】第八次作业成绩汇总
    【西北师大-2108Java】期中成绩汇总
    人脸识别性别的卷积神经网络
    主成分分析(PCA)原理详解
    使用KNN算法对鸢尾花数据集进行分类处理
    5.文献研读---基于教育数据挖掘的在线学习者 学业成绩预测建模研究--陈子健 朱晓亮
    4.文献研读---基于数据挖掘的学习者在线学习行为分析模型构建--卓荣庆 柏忠贤
    3.文献研读---基于Canvas Network开放数据集的MOOC学习分析--胡红梅 宗 阳
  • 原文地址:https://www.cnblogs.com/avention/p/8759520.html
Copyright © 2011-2022 走看看