python文件操作相关

文件的操作初识

  • 利用python代码写一个很low的软件,去操作文件

    • 文件路径:path
    • 打开方式:读,写,追加,读写,写读......
    • 编码方式:utf-8,gbk,gb2313......
  • '''三部曲
    1.打开文件
    2.对文件句柄进行相应的操作
    3.关闭文件
    '''

  • 使用 open() 函数一定要保证关闭文件对象,即调用 close() 函数。

  • 路径分隔符产生的问题:前面加r或在有问题的\前面再加个\

  • encoding=不是具体的编码或者解码,他就是声明:此次打开文件使用什么编码本。一般来说:你的文件用什么编码保存的,就用什么方法打开,一般都是用utf-8(有些使用的是gbk)。

  • mode: 可选,文件打开模式(可以不写,默认为mode=’r‘)

    • r:以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。
  • open():内置函数,open底层调用的是操作系统的接口。

    f1 = open('F:\子清.txt',encoding='utf-8',mode='r')
    content = f1.read()
    print(content) #content是字符串类型
    f1.close()
    '''
    内置函数,open底层调用的是操作系统的接口。
    f1,变量。f1,fh,file_handler,f_h,文件句柄:对文件进行的任何操作,都得通过文件句柄.的方式。
    encoding:可以不写(必须写),不写参数默认编码本:你操作系统的默认的编码
    Windows:gbk
    Linux:utf-8
    mac:utf-8
    read:全读取出来
    f1.close():关闭文件句柄(不关就会一直占用内容,每次用完都要记得关)
    '''
    
    

文件操作的读

  • r,rb,r+,r+b...四种模式()每一种都有以下几种方法

    同一目录下或文件夹下,找这个文件,直接输入这个文件名就可以(相对路径)

    1. r:

      • read():全部读出来

        f_h = open('文件的读',encoding='utf-8',mode='r')
        content = f_h.read()
        print(content)
        f_h.close()
        
      • read(你要读取几个字符就写几):按照字符读取 (写几就读几个字符空格也算)

        f_h = open('文件的读',encoding='utf-8',mode='r')
        content = f_h.read(4)
        print(content)
        f_h.close()
        
      • readline():按行读

        f_h = open('文件的读',encoding='utf-8',mode='r')
        print(f_h.readline())
        f_h.close()
        
      • readlines():返回一个列表,列表中的每个元素,是源文件的每一行。

        f_h = open('文件的读',encoding='utf-8',mode='r')
        l1 = f_h.readlines()
        print(l1)
        f_h.close()
        #一样的
        f_h = open('文件的读',encoding='utf-8',mode='r')
        print(f_h.readlines())
        f_h.close()
        
      • for循环读取

        f_h = open('文件的读',encoding='utf-8',mode='r')
        for i in f_h:
            print(i)
        f_h.close()
        #效果一样,但是如果是大文件一定要循环文件句柄,不要循环readLines
        f_h = open('文件的读',encoding='utf-8',mode='r')
        l1 = f_h.readlines()
        for i in l1:
            print(i)
        f_h.close()
        
    2. rb:操作的是非文本的文件。图片,视频,音频。(rb模式不用encoding)

      f = open('蔡徐坤.jpg',mode='rb')
      content = f.read()
      print(content)
      f.close()
      #bytes类型
      

文件操作的写

w,wb,w+,w+b四种模式

  1. w:没有文件,创建文件,写入内容(如果文件存在,先清空源文件内容再写入新内容)

    • 在进行文件操作的写的时候,如果只写了文件名,没有写目录的话,那么默认把这个文件创建在当前目录下也就是同一文件夹下
    • 清空的问题:关闭文件句柄,再次以w模式打开文件时,才会清空
    #创建到同一目录下
    f = open('文件的写',encoding='utf-8',mode='w')
    f.write('子清爱学习')
    f.close()
    #子清爱学习
    f = open('文件的写',encoding='utf-8',mode='w')
    f.write('有人在你看不到的地方偷着努力')
    f.close()
    #先清空再写入
    #有人在你看不到的地方偷着努力
    
  2. wb:操作的也是非文本类的文件(也可以操作文本类文件)(也是不用encoding)

    #先读出这个图片
    #再用读出来的bytes。写入新文件
    f = open('蔡徐坤.jpg',mode='rb')
    content = f.read()
    f.close()
    
    fh = open('坤坤.jpg',mode='wb')
    fh.write(content)
    fh.close()
    

文件操作的追加

a,ab,a+,a+b四种模式

  • a:没有文件创建文件,追加内容(如果有这个文件,那么在源文件的最后面追加内容)

    #没有这个文件,新建并追加
    f1 = open('文件的追加',encoding='utf-8',mode='a')
    f1.write('学习中的太有成就感了')
    f1.close()
    #有这个文件,在源文件后边追加
    f1 = open('文件的追加',encoding='utf-8',mode='a')
    f1.write('哦哦哦哦哦哦')
    f1.close()
    

文件操作的其他模式

  • r+:(读写)不能创建新文件,注意是先读后写(其实就是先读出来,然后在最后追加内容,可以说是读并追加)(注意:如果你在读写模式下,先写后读,那么文件就会出问题,因为默认光标是在文件的最开始,你要是先写,则写入的内容会讲原内容覆盖掉,直到覆盖到你写完的内容,然后在后面开始读取。

    f = open('文件操作的读写',encoding='utf-8',mode='r+')
    content = f.read()
    print(content)
    f.write('乱七八糟')
    f.close()
    

文件操作的其他功能(重要)

f.***()

  • tell():获取光标的位置,单位是字节
  • seek():调整光标的位置。单位是字节。光标默认从头开始,也就是seek(0),我们可以用这个调整光标位置,选择从哪开始读。seek(0,2)是调整到文件的最后
  • flush():强制刷新(write后一定要跟flush,因为有些不会帮你保存,flush帮你强制保存)

打开文件的另一种方式

with:有缩进,可以操作多个文件 (写在同一行,也可以用\来换行,表示这一行还没完下一行也是这一行)

  • 优点:不用手动关闭句柄(一定时间内消失)。

    • 可以操作多个文件
    with open('文件的读',encoding='utf-8',mode='r') as f1:
        print(f1.read())
    
    with open('文件的读',encoding='utf-8',mode='r') as f1,\
            open('文件的写',encoding='utf-8',mode='w') as f2:
        print(f1.read())
        f2.write('ziqing')
    

文件的改的操作

low版的

  1. 以读的模式打开原文件

  2. 以写的模式创建一个新文件

  3. 将原文件的内容读出来修改成新内容,写入新文件

  4. 将源文件删除

  5. 将新文件重命名为原文件

    import os
    with open('文件的读',encoding='utf-8',mode='r') as f1,\
        open('文件的读2',encoding='utf-8',mode='w') as f2:
        old_content = f1.read()
        new_content = old_content.replace('子清','帅哥')
        f2.write(new_content)
    os.remove('文件的读')
    os.rename('文件的读2','文件的读')
    

    升级版的(low版是直接用read全部读出来,如果文件特大,会直接撑爆内存,所以这里用for循环,一行一行的操作)

    import os
    with open('文件的读',encoding='utf-8',mode='r') as f1,\
        open('文件的读2',encoding='utf-8',mode='w') as f2:
        for i in f1:
            new_content = i.replace('帅哥','韩子清')
            f2.write(new_content)
    os.remove('文件的读')
    os.rename('文件的读2','文件的读')
    

总结

三个大方向:

  • 读,四种模式:r,rb,r+,r+b
  • 写,四种模式:w,wb,w+,w+b
  • 追加,四种模式:a,ab,a+,a+b

相应的功能:对文件句柄的操作:read(),read(n),readline(),readlines(),write(),tell(),seek(),flush()

文件改的操作(重点)

posted @ 2020-06-27 18:43  韩子清  阅读(161)  评论(1)    收藏  举报