• 文件处理


    文件处理流程:

      (1)打开文件,得到文件句柄并赋值给一个变量

      (2)通过句柄对文件进行操作

      (3)关闭文件

    1. 文件读取操作(默认模式,文件必须存在,不存在则抛出异常)  r      f = open ('jiao ','r',encoding = 'utf8')   

                                      注:此处当文件再统同一路径下,可以直接写文件名,否则应写文件的绝对路径

      (1)f.read ()  读取文件全部内容,括号内传入参数 x 则表示读取 x 个字符

    f = open('jiao','r',encoding = 'utf-8')    打开一个文件,编码方式为‘utf-8’ (存在硬盘上的文件默认为 utf-8编码方式,windows系统读取文件为gbk编码,而open函数会检索系统编码方式并应用
    data=f.read()
    print(data)
    f.close())

      (2)f.readline()从光标处开始读取文件一行的内容 如果在此之前文件执行过 f.read() 即全部读取过,则再执行此语句运行结果为空

      (3)f.readlines()从光标处开始读取文件所有内容并放在一个列表中

      (4)f.readable()判断文件是否可读返回True 或者False

    2.文件写操作(不可读,不存在则创建,存在则清空内容)   w     f = open('jiao', 'w',encoding = 'utf8')  

      (1)f.write()   从光标出开始写入内容,括号中必须以字符串的形式传入

      (2)f.writeable()   判断文件是否可写入,返回True 或者False

      (3)f.writelins()  从光标处开始写入内容,括号内以列表的形式传入,列表内必须全都是字符串,也可以是字符串

       注:如果打开的文件有内容在进行 f.write 操作,则新写入的内容会覆盖源文件第一行的内容,因为文件打开贯标停在开始的位置,而写入是从光标出开始的

         若要避免这种情况,可以先以读的方式打开这个文件,读取内容,再用写的方式打开这个文件进行操作

    src_f = open('jiao','r',encoding = 'utf8')
    data = src_f.readlines()
    src_f.close()
    
    
    dst_f = open('jiao','w',encoding='utf8')
    dst_f.writelines(data[0])
    dst_f.close()

        上述代码实则模拟了系统中对文件进行修改(修改操作为删除文件‘jiao’除第一行外的全部内容)的操作,文件并不是真的被修改,二十被新的文件所覆盖

       (4)f.closed  判断文件是否关闭

      (5)f.flash()    刷新,将写到文件中的内容保存到硬盘中

    3.追加操作(可读,不存在则创建,存在则只追加内容)  a    f = open('jiao' ,'a',encoding = 'utf8')    

    ‘+’表示可以同时读写某个文件

    4. r+   读写 (可读、可写) f = open ('jiao','r+','utf8')    

      (1)f.tell()   返回当前光标位置,按字节计数(只有以read(read(3)代表读三个字符)进行读操作时,才是按字符进行计数,其余都是以字节为移动单位

      (2)f.seek()   控制光标的移动,默认不论执行几次,都是从文件开始位置算

    f = open('jiao','r+',encoding = 'utf8')
    print(f.tell())
    print(f.seek(10))
    print(f.tell())
    print(f.seek(3))
    print(f.tell())
    运行结果:
    0 10 10 3 3

         当使用seek(x,1)时,是从当前光标的位置开始移动,但此时应以b的模式打开文件

    f = open('jiao','rb')
    print(f.tell())
    print(f.seek(10))
    print(f.tell())
    print(f.seek(3,1))
    print(f.tell())
    运行结果:
    0
    10
    10
    13
    13

        当使用seek(x,2)时,是从最后一个光标位置开始移动(从后往前移动),此时x应给为负数

      (3)f.truncate()      截取 f.truncate(10)     截取十个字节的内容(可在w模式、a+模式,r+模式下应用,但是不能在w+模式下用,因为w+模式代开文件,

                                   之前的内容会被清除,即无内容可截

    5.w+   写读(可读、可写)

    6.a+    写读(可读、可写)

    7.with     with open('jiao','w') as f:     

       与open的区别是:open打开文件进行操作后必须以close结尾将文件关闭,而用with时不需要

              with可同时打开两个文件

    with open('jiao','r',encoding = 'utf8')    此处斜杆是为了避免一行的代码过长因此换行写,不加斜杆会报错
        open('jiao_new','w',encoding = 'utf8'):

    8.文件处理模式b模式   (b的方式不能指定编码,因为b模式就是在对原生编码(二进制)进行操作) b模式下传入、传出的都是字节

        (1)f = open('jiao','rb',)      读操作

    f = open('jiao','rb')
    data=f.read()
    print(data)
    print(data.decode('utf8'))        读出来的是字节形式,想要看到正常内容需要对其解码
    f.close()

      (2)f = open('jiao','wb')    写操作   以‘wb’模式进行写处理,写入的是字节形式,

    f = open('jiao','wb')
    f.write(bytes('11111
    ',encoding = 'utf8'))   以‘wb’模式进行写处理,写入的是字节形式,字符串以字节形式写入,中间需要经过编码,转化为字节
    f.write('guagua'.encode('utf8'))
    f.close()

      (3)f = open('jiao','ab')   追加操作    

    9.循环文件的方式   for i in f:

     

                             

    f = open('jiao','wb')
    f.write(bytes('11111 ',encoding = 'utf8'))
    f.close()
  • 相关阅读:
    语言基础
    进制转换
    添加
    查找
    继承
    封装
    面向基础 c#小复习
    主外键
    三个表的关系
    插入信息,模糊查询,聚合函数,时间函数,排序,字符串函数,数学函数,求个数,球最大
  • 原文地址:https://www.cnblogs.com/jgua/p/13510893.html
Copyright © 2020-2023  润新知