• Python-文件处理


    一、文件操作的流程

      1.打开文件

      2.对文件进行操作(读、写、改)

      3.关闭文件

    #1.带编码方式读文件
    f = open(file='D:/文件操作.txt', mode='r', encoding='gbk')  # 找到并以只读模式打开文件
    data = f.read()    # 读取文件并存在内存上
    print(data)       # 打印读取的文件
    f.close()         # 关闭文件
    
    #2.未知编码方式时二进制只读
    f = open(file='D:/文件操作.txt', mode='rb')  # 找到并以只读模式打开文件,以默认的gbk的编码方式读取文件
    data = f.read()    # 读取文件并存在内存上
    print(type(data), data)       # 打印读取的文件
    data2 = data.decode('gbk')  # 需要手动decode 才能显示文本
    print(data2)
    f.close()         # 关闭文件

    二、基本操作

    1.文件打开方式

       f=open('路径',‘模式’)        #1.文件路径       2.什么方式打开文件。

     2. 打开模式:  

      r ——只读模式——》默认模式——》文件必须存在    ——》不存在程序报错

      w——只写模式—— 》 不可读  ——》存在则清空内容——》不存在则创建

      a——追加模式  ——》可读      ——》 存在则只追加内容——》不存在则创建

      r+——读写模式——》先读完文件,追加到文件后面

      w+——写读模式——》先清空文件,再写新的东西

    三、读文件

      1.带编码方式读

      2.不带编码方式读

      3.不知道文件编码方式怎么办?

        用chardet包

    import chardet
    
    f = open('D:/文件操作.txt', mode='rb')  # 未知文件格式,先通过读二进制方式读取
    data = f.read()         # 读取数据放到内存中
    result = chardet.detect(data)  # 通过char det方法检测编码方式
    print(result)
    f.close()

    output:

      4.循环文件

    f = open(file='D:/文件操作.txt', mode='r', encoding='gbk')  # 找到并以只读模式打开文件
    for line in f:
        print(line.strip())       # 一次取一行打印,由于print会自动换行,所以去除一下空格
    f.close()

    四、写文件

    #1.指定编码方式写操作
    f = open('D:/文件操作1.txt', mode='w', encoding='utf-8')
    f.write('crm')  # 写入字符串
    f.close()       # 关闭文件
    
    #2.二进制方式写操作
    f = open('D:/文件操作2.txt', mode='wb')
    f.write('crm'.encode('utf-8'))  # 写入字符串
    f.close()       # 关闭文件b

    五、追加

    #1.mode='a'追加操作
    f = open('D:/文件操作1.txt', mode='a', encoding='utf-8')
    f.write('hahaha')  # 写入字符串
    f.close()       # 关闭文件
    
    #2.mode='ab'二进制方式追加操作
    f = open('D:/文件操作2.txt', mode='ab')
    f.write('hahaha2'.encode('utf-8'))  # 写入字符串
    f.close()       

    六、读写模式

    f = open('D:/文件操作1.txt', mode='r+', encoding='utf-8')
    data = f.read()
    print(data)
    f.write('
    这是r+的操作')
    f.close()
    
    输出:

     七、写读模式(略:没什么用)

    八、文件操作标准化函数:

    # def fileno(self, *args, **kwargs): # real signature unknown
    # 返回文件句柄在内核中的索引值,以后做IO多路复用时可以用到
    #def flush(self, *args, **kwargs): # real signature unknown
    # 把文件从内存buffer里强制刷新到硬盘

     

    #flush用法
    f = open('f_flush_test.txt', 'w')
    f.write('abcde')
    f.flush()     # 把内存内容强制刷入硬盘
    print(f.readable())  # 判断是否可读,写操作不可读
    f.close()
    View Code

    # def readline(self, *args, **kwargs): # real signature unknown
    # 只读一行,遇到 or 为止

     

    #readline用法
    f = open('D:/文件操作.txt', 'r')
    data = f.readline()    # 每次读一行,遇到
    或
    停止
    print(data)
    f.close()
    View Code

     

    # def readable(self, *args, **kwargs): # real signature unknown
    # 判断是否可读

     

    # def writable(self, *args, **kwargs): # real signature unknown
    # 判断文件是否可写

     

    # def seekable(self, *args, **kwargs): # real signature unknown
    # 判断文件是否可进行seek操作

     

    # #readable writable seekable 用法
    f = open('f_flush_test.txt', 'r')
    #f = open('D:/文件操作.txt', 'r')
    print('read(1)操作', f.read(1))      # 读一个字符
    print('read()操作', f.read())      # 此时光标已经在第一个字符,把光标所在之后的内容读入内存
    print('readable()操作', f.readable())   # 判断是否可读,写操作不可读
    print('writable()操作', f.writable())   # 判断是否可写,读操作不可写
    print('seekable()操作', f.seekable())   # 判断光标是否可移动
    f.close()
    View Code

     

    # def seek(self, *args, **kwargs): # real signature unknown
    # 把操作文件的光标移到指定位置

    # def tell(self, *args, **kwargs): # real signature unknown
    # 返回当前文件操作光标位置

    # def truncate(self, *args, **kwargs): # real signature unknown
    # 按指定长度截断文件
    # *指定长度的话,就从文件开头开始截断指定长度,不指定长度的话,就从当前位置到文件尾部的内容全去掉。

     九、修改文件

      1、占内存、不占硬盘——全部读到内存再改

    #方法1:
    #    1.把文本文件整体读进内存。
    #    2.通过s.repalce(old,new)把匹配的字符串替换。
    #    3.关闭文本文件。
    OLD_STR = '哈哈'
    NEW_STR = '改了'
    
    file = 'D:文件操作.txt'
    
    f = open(file, 'r+', encoding='gbk') # 打开文件
    str = f.read()    # 读取文件到内存
    str2 = str.replace(OLD_STR, NEW_STR)
    print(str2)
    f.close()

      2、占硬盘、不占内存——边读边改

    #方法1:
    #    1.把文本文件整体读进内存。
    #    2.通过遍历的方法,把匹配的字符串替换。
    #    3.关闭文本文件。
    
    import os
    
    OLD_STR = '哈哈'
    NEW_STR = '改了'
    
    file = 'D:文件操作.txt'
    file_new = '%s.new' % file
    f_new = open(file_new, 'w',)
    f = open(file, 'r', encoding='gbk')  # 打开文件
    for line in f:                      # 遍历每一行
    
        if OLD_STR in line:
            line = line.replace(OLD_STR, NEW_STR)  # 把旧文件的数据更新
        f_new.write(line)
    
    f.close()
    f_new.close()
    os.replace(file_new, file)  # 通过替换文件方式更新数据

      

  • 相关阅读:
    JS如何获取并操作iframe中的元素?
    CSS(14)元素定位
    C#基础 [01] 从Hello World 开始
    CSS(15)浮动
    C#基础 [05] 类和对象
    关于Visual Studio 2010 编辑器的一些设置
    Ext JS(1)Ext JS简介
    C#基础 [03] 类型和成员
    Python中基本数据类型的学习
    Python:集合与字符串格式化
  • 原文地址:https://www.cnblogs.com/AYxing/p/8619776.html
Copyright © 2020-2023  润新知