• 文件操作补充


    文件操作:

    重点:

    1,文件操作的三步骤:打开文件 使用文件 关闭文件

    2,文件操作的三要素:文件源 操作模式 编码

    3,with语法 : with open() as 别名,open () as 别名:

    4,重点方法 :read() write() readline() close() f.flush() f.seek()

    操作模式

    主模式:r w a

    从模式:b t +

    操作方法:

    read() readline() readlines()

    write() writelines() flush()

    光标 seek() tell()

    特征:encoding closed()

    了解:readable() writeable()name

    操作文件步骤;

    1,打开文件

    ​ f 被程序持有,文件被操作系统持有

    ​ f = open('file.txt','r',encoding='utf-8')

    ​ del f

    ​ f.close()

    2,操作文件

    ​ f.read()

    3,关闭文件

    ​ f.close()#####操作系统对文件的持有权 一定要在文件操作完毕后释放


    with open('file.txt','r+','utf-8') as f:
       date = f.read(6)####指定读取的字节数
       print(date)
       message1 = f.read(2)#####在当前位置接着在读2个字节
       print(message1)
       
       line1= f.readline()###读取一行
       print(line1)
       
       lines = f.readlines()#####将所有的行一次性读出来,读出来之后返回的是一个列表 列表的元素是每一行的字符串
       
      with open ('file.txt','w+','utf-8') as w:

       print(w.readable())

       print(w.writeable())

       w.write('456 ')

       w.flush()###当数据量过大时,可以手动将内存中的数据刷新到硬盘中

       w.writelines(['000 ','111 ','222 '])

       ###

       
       

    在 r read 读模式下,文件必须提前存在,如果不存在 会报错

    文件操作


    #打开文件
    f = open(r'文件路径''文件的操作模式',encoding = 'utf-8')
    #使用文件
    f.read()
    f.write()
    #关闭文件
    f.close()
    #基础读
    #文件操作模式:r
    1,按字符经行操作
    2,read() 读所有内容, read(10) 指定读取字符长度
    3,readline() 一次读一行
    4,readlines() 将文件一行一行读到list中
    f = open(r'文件路径''r',encoding = 'utf-8')
    读模式下,操作文件  文件必须提前存在,否则会报错
    w 模式下,操作文件 ,如果文件不存在,则会自动创建,文件存在,就会清空重新写

    基础写

    文件操作模式:w 文件不存在就新建,存在就清空

    1.按照字符经行操作

    2,write('写入第一行 写入第一行 ')

    3,flush()将之前写入到内存中的数据写入到硬盘中

    4,writelines(list):list中存放的是一条条文件内容,需要明确 标识换行

    writelines(['111 ','222 '])

    with 语法

    操作系统对文件的持有权由with自动管理释放

    with open 语法

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

    ​ date=f.read()

    ​ print(date)

    操作模式

    主模式

    r:文件必须存在的读

    w:文件无需存在的写,无创建,有清空再写

    a:文件无需存在的写,无创建,有再文件最后追加写

    从模式

    t:按文本字符操作数据(默认模式)

    b:按文本字节操作数据

    +:可读可写

    了解:

    X:新建文件写,如果文件已经存在,则抛出异常

    注:主模式可以单独使用,单独使用一个主模式时,默认的从模式时t,文本模式。从模式必须依赖主模式 才能使用。从模式中,t 和b时相互对立的,二者不可以同时使用,从模式可以选择一个或者两个。主模式选择一个,这样的组合方式有很多中,可读可写追加写at+

    #追加模式
    with open('file.text','a',encoding = 'utf-8') as f :
       f.write('123 ')
       print(123)
       f.write('456 ')
       f.flush()
       f.write(789n)

    字节方式操作文件

    b操作模式下,不需要指定encoding,原因时b能对所有类型数据经行操作,包括文本视频音频

    而utf-8只是文本文件的编码方式

    数据在硬盘中本就是以二进制经行存储的,所以b默认操作就是对数据从硬盘到数据的拷贝

    但是如果数据要展现给用户,文本文件就要涉及到解码,其他文件需要通过专业工具打开


    with open ('file.txt','rb') as f :
       date = f.read()
       print(date)
       #但如果数据要展现给用户,文本文件就要涉及到解码,其他文件也是如此
       print(date.decode('utf-8'))
     
    ##   r+ 从头开始写,、a+ 从最后开始追加写 w+清空从零开始写

    一般读一个文件,写一个文件,一般不在同一个文件中边读边写

    文件操作常用的步骤是数据的上传与下载,一般最多的是图片或者excell


    #操作模式
    #主模式
    '''
    r:文件必须存在的读
    W:文件无需存在的写,有则清空开始写,没有则创建空文件开始写
    a:文件无需存在的写,无创建,有在文件后面追加写
    '''
    #从模式
    '''
    t:按照文本字符操作数据(默认方式)
    b:按文本字节操作数据
    +:可读可写

    注:主模式可以单独使用,单独使用一个主模式时,默认的从模式时t,文本模式。从模式必须依赖主模式 才能使用。从模式中,t 和b时相互对立的,二者不可以同时使用,从模式可以选择一个或者两个。主模式选择一个,这样的组合方式有很多中,可读可写追加写at+
    可以搭配出来的组合有
    rt wt at
    rb wb ab
    rt+ wt+ at+
    rb+ wb+ ab+
    '''

    游标操作

    大前提:游标操作一定要在b模式下进行操作,因为游标一定按字节进行偏移

    seek(偏移量,操作位置)

    操作位置:0:从头开始,1从当前位置开始,2从最后位置开始

    with open('file.txt','rt',encoding='utf-8') as f:

    ​ d1 = f.read(7)

    ​ print(d1)

    ​ d2 = f.read(2)

    ​ print(d2)

    大前提:seek一定在b模式下经行操作,因为seek移动是按照字节经行操作


    open('file.txt','wt+',encoding = 'utf-8') as f:
    f.seek(偏移量,操作位置)
    f.seek(5,0)  #从开始往后移5个字节
    f.seek(-1,1)# 从当前位置向后偏移1个字节
    f.close(1,1)#从当前位置向后偏移一个字节
    f.seek(-5,2)#从末尾向前偏移5个字节

    '''
    seek(num1,num2)这个移动游标的方法提供了两个位置的参数,第一个位置表示移动的字节数,正数表示向后移动,负数表示向前移动,第二个位置的参数表示移动起始游标的位置,0表示从最开始最前面的位置开始移动,1表示从当前的位置开始移动,2表示从最后面结尾的位置开始移动‘
    '''

    修改文件

    rb 在当前位置经行 覆盖书写

    ab+ 可以操作游标,但只对读起作用,写仍然是最后追加

    文件的修改不能用ab+ 只能用wb+


    with open ('change.txt','rb+') as f:
       date = f.read()
       newDate = date.decode('utf-8').replace('16','016')
       
       f.seek(0,0)
       f.write(newDate.encode('utf-8'))

    复制文件

    复制文件也就是将一个文件中的内容,读好之后,在写入另一个文件中:


    with open ('old.txt','r',encoding = 'utf-8') as f1,open('new.txt','w',encoding = 'utf-8') as f2:
       #文件的循环
       for line in f1:####对可读文件对象直接遍历循环,得到的是一行行内容
           print(line)

    ###复制一张图片

    import os
    with open ('001.png','rb') as f1,open('002.png','wb') as f2:
       for line in f1:
           f2.write(line)
    os.remove(r'D:pythonstudyexecisehomeworkday301.png')

    秒传案例

    ####计算得到秒传依据
    with open ('002.png','rb') as f :
       date = f,read()
       #print(date)
       length = len(date)
       print(length)
       # 设置秒传算法,1 截取部分字节 2 加密字节得算法
       # 1,从头开始读10个字节 中间读10个字节 末尾读10个字节
       # 2,将所有数据经行拼接
       f.seek(0,0)####把光标移到最前面最开始的位置
       d1 = f.read(10)
       f.seek(length//2,0)
       d2 = f.read(10)
       f.seek(-10,2)###将光标移到最后末尾倒数10个字节
       d3 = f.read(10)
       mk = d1 +d2 +d3
       print(mk)
    #####实现秒传
    with open ('002.png','rb') as f :
       new_mk =b''
       f.seek(0,0)
       new_mk +=f.read(10)
       f.seek(length//2,0)
       new_mk += f.read(10)
       f.seek(-10,2)
       new_mk +=f.read(10)
    if new_mk == mk:
       print('秒传')
    else:
       print('老老实实慢慢传吧')

    文件的遍历


    ##最常用读写得操作。直接将一个文件的内容复制都另一个文件中
    with open('source','r',encoding = 'utf-8') as f1,open('target','w',encoding = 'utf-8') as f2:
       for line in f1:
           f2.write(line)
         
  • 相关阅读:
    DotText源码阅读
    看来这世界看得太清楚了也未必是种好事呢~~~~~~~
    在Init之前究竟执行了什么?
    孙子兵法
    Excel区域重命名
    Getbuffer ReleaseBuffer Cstring
    批量删除svn标志
    VB制作网页自动填表(强烈推荐)
    GetModuleFileName
    ansi编码
  • 原文地址:https://www.cnblogs.com/1832921tongjieducn/p/10652450.html
Copyright © 2020-2023  润新知