• Python文件操作


    简介

    引子

    现在这个世界上,如果可以操作文件的所有软件都消失了,比如word,wps等等,此时你的朋友通过qq给你发过来一个文件,文件名是:美女模特空姐护士联系方式.txt,在座的所有男同学,那么你接受到这个文件之后,你的内心是否有一丝冲动,当然咱们不是那种闷骚的人,其实我们就是比较好奇,就是想要看看里面写的是什么,仅此而已,绝不联系。但是我说了所有可以操作文件的软件全部都没了,那么你是不是百爪挠心,火急火燎,哎呀。别急呀,你忘了么?你学过Python这门编程语言,这个语言肯定有能操控文件的功能。我相信在这种强大的动力下,你是可以,必须能学会的。

    • 编码方式

      utf-8,gbk,gb2312....  (昨天刚讲完编码,文件其实就是数据的存储,数据存储你需要编码知道这个数据是以什么编码存储的)

    • 操作模式

      只读,只写,追加,写读,读写....

    1 文件的读

    • read()
      读取全部
    file = open('D:内容.txt',encoding='utf-8',mode='r')
    
    print(file.read())
    
    file.close()
    
    '''
    open内置函数,open底层调用的是操作系统接口。
    f1,变量 f1 fh file f_h 文件句柄
    '''
    
    
    • read(n)
      指定字符个数进行读
    
    file = open('D:内容.txt',encoding='utf-8',mode='r')
    
    print(file.read())
    
    file.close(1)
    >>>
    详
    
    • readline()
      按行读
    file = open('D:内容.txt',encoding='utf-8',mode='r')
    
    print(file.readline()
    
    file.close(1)
    
    
    • readlines()

    readlines() 返回一个列表,列表里面每个元素是原文件的每一行,如果文件很大,占内存,容易崩盘。

    
    f = open('log',encoding='utf-8')
    print(f.readlines())
    f.close()
    # 结果['666666
    ', 'fkja l;
    ', 'fdkslfaj
    ', 'dfsflj
    ', 'df;asdlf
    ', '
    ', ]
    
    • for 循环读取

    可以通过for循环去读取,文件句柄是一个迭代器,他的特点就是每次循环只在内存中占一行的数据,非常节省内存。

    
    f = open('../path1/弟子规',mode='r',encoding='utf-8')
    for line in f:
        print(line)      #这种方式就是在一行一行的进行读取,它就执行了下边的功能
    
    print(f.readline())
    print(f.readline())
    print(f.readline())
    print(f.readline())
    f.close()
    
    • rb读取图片(bytes)

     rb模式:以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。记住下面讲的也是一样,带b的都是以二进制的格式操作文件,他们主要是操作非文字文件:图片,音频,视频等,并且如果你要是带有b的模式操作文件,那么不用声明编码方式。

    file = open('D:美女.jpg',mode='rb')
    
    img = file.read()
    
    file.close()
    
    f1 = open('美女.jpg',mode='wb')
    
    f1.write(img)
    
    f1.close()
    >>> 
    会创建一个名字为美女.jpg图片
    

    2 文件的写

    • wb模式

    wb模式:以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如:图片,音频,视频等。

    file = open('D:美女.jpg',mode='rb')
    
    img = file.read()
    
    file.close()
    
    f1 = open('美女.jpg',mode='wb')
    
    f1.write(img)
    
    f1.close()
    >>> 
    会创建一个名字为美女.jpg图片
    
    • w模式

    如果文件不存在,利用w模式操作文件,那么它会先创建文件,然后写入内容.

    f1 = open('文件.txt',encoding='utf-8',mode='w')     #没有会在当前目录下创建一个这样文件,有责覆盖里的内容
    
    print(f1.write("Hello python"))
    
    f1.close()
    
    • a追加模式

    打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入

    如果文件不存在,利用a模式操作文件,那么它会先创建文件,然后写入内容。

    f1 = open('文件.txt',encoding='utf-8',mode='a')     
    
    print(f1.write("
    Hello python"))
    
    f1.close()
    
    
    • r+读写模式
      打开一个文件用于读写。文件指针默认将会放在文件的开头。

     如果你在读写模式下,先写后读,那么文件就会出问题,因为默认光标是在文件的最开始,你要是先写,则写入的内容会讲原内容覆盖掉,直到覆盖到你写完的内容,然后在后面开始读取。

    f1 = open('文件.txt',encoding='utf-8',mode='r+')
    
    print(f1.read())
    print(f1.write("
    Hello python"))
    
    f1.close()
     
    

    3 文件的另一种打开方式

    
    # 1,利用with上下文管理这种方式,它会自动关闭文件句柄。
    with open('t1',encoding='utf-8') as f1:
        f1.read()
        
    # 2,一个with 语句可以操作多个文件,产生多个文件句柄。
    with open('t1',encoding='utf-8') as f1,
            open('Test', encoding='utf-8', mode = 'w') as f2:
        f1.read()
        f2.write('老男孩老男孩')
        
    
    

    4 文件的修改

    将硬盘存放的该文件的内容全部加载到内存,在内存中是可以修改的,修改完毕后,再由内存覆盖到硬盘(word,vim,nodpad++等编辑器)

    
    import os  # 调用系统模块
    with open('a.txt') as read_f,open('.a.txt.swap','w') as write_f:
        data=read_f.read() #全部读入内存,如果文件很大,会很卡
        data=data.replace('alex','SB') #在内存中完成修改
        write_f.write(data) #一次性写入新文件
    os.remove('a.txt')  #删除原文件
    os.rename('.a.txt.swap','a.txt')   #将新建的文件重命名为原文件
    

    方式二:将硬盘存放的该文件的内容一行一行地读入内存,修改完毕就写入新文件,最后用新文件覆盖源文件

    
    import os
    
    with open('a.txt') as read_f,open('.a.txt.swap','w') as write_f:
        for line in read_f:
            line=line.replace('alex','SB')
            write_f.write(line)
    
    os.remove('a.txt')
    os.rename('.a.txt.swap','a.txt') 
    
  • 相关阅读:
    vb.net 数组参与SQL语句的查询范例
    JQUERY范例
    DOS批处理释义
    GridVIew单元格合并
    [无关] 胡言乱语3
    [数据] ZZ 数据分析这点事
    [ZZ] Big Data 开源工具
    [python] ZZ 时间相关
    python 获取时间代码
    javascript基础之我见(1)深度理解原型链
  • 原文地址:https://www.cnblogs.com/precipitation/p/15097464.html
Copyright © 2020-2023  润新知