zoukankan      html  css  js  c++  java
  • Python--基础文件读写操作

    1,open(),对文件进行读写操作之前,要先打开文件,获取文件的句柄

    懒人专用方法,文件打开后不用关闭

    with open(r'somefile.txt','r+',encoding='utf8') as f:

    f.readlines()

    1、open(file_name[,access_mode][,buffering])

    (1)参数说明
    file_name:一个包含了你要访问的文件路径及文件名称的字符串值。尽量使用绝对路径
    access_mode:打开文件的方式:这个参数是非强制的,默认文件访问模式为只读(r)
    r,只读
    w:写之前会清空文件的内容
    a:追加的方式,在原本内容中继续写
    buffering:先写到缓存中
    如果buffering的值被设置为0,就不会有寄存;如果值为1,访问文件时会缓存行;如果值位大于1的整数,表明了这就是寄存区的缓冲大小;如果取负值,寄存区的缓冲大小则为系统默认。该参数也是非强制性的。
    (2)返回值
    该语句表示返回的File_object是一个指向文件的指针(一个文件对象)文件句柄。当以只读模式(r)打开一个不存在的文件时,就会报IOError异常(文件不存在),但如果是以写或追加模式(w/a/a+)打开一个不存在的文件时,默认会创建该文件,但如果是所在路径中有目录不存在,也会报IOError异常
     
    创建一个文件:
    fp=open('d:\tmp\01.txt',w ) #创建并打开文件01.txt,用写的方式,文件句柄赋给fp
     
    2、文件操作模式
    r,w,a
    r+:可读可写
    w+:打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
    a+:打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。
     
    rb wb ab 读写二进制
    3,获取文件句柄后,就可以对文件进行操作了,常用操作方法
    (1)fp.closed#判断文件是否已经关闭。返回true如果文件已被关闭,否则返回false
    (2)fp.mode#输出读写模式。返回被打开文件的访问模式。
    (3)fp.name#返回文件的名称。
    (4)fp.close()#刷新缓冲区里任何还没写入的信息,并关闭该文件,这之后便不能再进行写入。
    (5)flush()#把缓冲区中的内容持久化写到磁盘里,缓存区写满的情况,系统会自动调用flush()方法。
    (6)next()#返回下一行,并将文件操作标记位移到下一行。把一个file用于for ... in file这样的语句时,就是调用next()函数来实现遍历的
    (7)seek(offset)#文件指针移动到oofset位置,空标识移动到0位置

    文件的读取位置

    有的时候我们只想读文件的一部分的内容,或者我们需要从文件的某个位置读数据,应该怎么操作呢,用seek()函数

    file_obj.seek(offset,whence=0)

    #seek主要是在文件中移动指针,从whence(0表示文件头,1表示当前位置,2表示文件尾)偏移offset个字节

    ====123.txt===

    123456789

    1)从头读3个字符

    f=open('123.txt')

    f.seek(0,0)

    print f.read(3)

    f.close()

    >>123

    2)从尾读3个字符

    f=open('123.txt')

    f.seek(-3,2)#2表示从文件指针指向尾巴,-3表示向前移动3个字节

    print f.read(3)#读3个字节

    f.close()

    >>789

    (8)tell()#返回文件操作标记的当前位置,以文件的开头为原点 ;
    (9)裁剪文件truncate([size])
            用于截断文件,如果指定了可选参数 size,则表示截断文件为 size 个字符。 如果没有指定 size,则从当前位置起截断;截断之后 size 后面的所有字符被删除。
            f1.truncate()#清空文件
    4,文件的读写
    (1)read([size]) #size:读取的长度,以byte为单位。如果不指定参数,表示一次性读取全部内容,以字符串形式返回,并且每一行结尾会有一个" "符号
    (2)readline([size]) #调一次读取一行,如果给定了size,有可能返回的只是一行的一部分,以字符串的形式返回,并且结尾会有一个换行符" "。读完一行,文件操作标记移动到下一行的开头。返回的是字符串
    (3)readlines([size]) 
    ###读取文件的全部内容,这个函数的内部是通过循环调用readline()来实现的,返回的是列表格式,每一行是列表的一个元素,并且结尾会有一个换行符" "
    (4)write(str) #把str写到文件中,write()并不会在str后加上一个换行符 ,只能写字符串
    (5)writeline()#每次只写入一行
    (5)writelines(seq) 
    seq:把seq(序列)的内容全部写到文件中(多行一次性写入)。也不会自动加入换行符。
    注意:writelines()方法是针对列表的操作。它接收一个字符串列表作为参数,也就是seq是一个列表
     
     
     
  • 相关阅读:
    openfire部署文档(备用)
    WPS目录制作方法
    Spring.net Could not load type from string value问题解决办法
    [转载]线程间操作无效: 从不是创建控件“ListBox1”的线程访问它
    [转载].Net中如何操作IIS(源代码)
    [转载]DirectoryEntry配置IIS7出现ADSI Error:未知错误(0x80005000)
    [转载]Sublime Text 2
    [转载]再谈iframe自适应高度
    js key事件 keyCode大全
    [转载]HTML5 Audio/Video 标签,属性,方法,事件汇总
  • 原文地址:https://www.cnblogs.com/niuniu2018/p/7700234.html
Copyright © 2011-2022 走看看