zoukankan      html  css  js  c++  java
  • python 文件操作

    一、文件操作

    1.1 文件操作三部曲

    1. 打开文件
    2. 对文件句柄进行相应的操作
    3. 关闭文件

    1.2 、文件的功能模式

    • 读,四种模式,r rb r+ r+b
    • 写,四种模式 , w wb w+ w+b
    • 追加,四种模式, a ab a+ a+b
    • 相映的功能,对文件句柄的操作,read , read(n) , readlines() , write(), tell() 、seek() flush

    二、读取文件

    2.1、读取文件所有内容

    f1 = open(r'D:b.txt', encoding='utf-8', mode='r')
    content = f1.read()
    print(content)
    f1.close()
    
    # open 内置函数
    # f1,变量,文件句柄,对文件的任何操作都得通过文件句柄完成,在内存当中只占用一行文件的数据
    # encoding 可以不写,不写得默认编码本是操作系统得默认编码
    # f1.close()关闭文件句柄
    

    2.2、按照字符读取

    f1 = open(r'D:b.txt', encoding='utf-8', mode='r')
    content = f1.read(5) # 读取光标后五个字符
    print(content)
    f1.close()
    
    

    2.3、按照行读取

    f1 = open(r'D:b.txt', encoding='utf-8', mode='r')
    print(f1.readline())
    print(f1.readline())
    f1.close()
    
    
    f1 = open(r'D:b.txt', encoding='utf-8', mode='r')
    print(f1.readlines())
    f1.close()
    # f1.readline() 逐行读取
    # f1.readlines() 返回一个列表,列表中的每个元素是源文件的每一行
    

    2.4、for循环逐行读取文件

    f1 = open(r'D:b.txt', encoding='utf-8', mode='r')
    for line in f1:
        print(line)
    f1.close()
    

    2.5、 rb,操作非文本的文件,如图片,视频,音频

    f1 = open(r'C:Users19595PicturesDesktopBackgroundaa.jpg', mode='rb')
    content = f1.read()
    print(content)
    f1.close()
    

    三、文件写入操作

    3.1、w 写入模式

    f = open('文件的写',encoding='utf-8',mode='w')
    f.write('随便写一点')
    f.close()
    
    # 如果文件存在,先清空源文件内容,在写入新内容,如没有则新创建
    

    3.2、wb写入模式,非文本文件

    f1 = open(r'C:Users19595PicturesDesktopBackgroundaa.jpg', mode='rb')
    content = f1.read()
    # print(content)
    f1.close()
    
    f = open('bb.jpg',mode='wb')
    f.write(content)
    f.close()
    
    # 以二进制读取aa.jpg图片,再将读取后的二进制写入到bb.jpg形成新图片文件
    

    3.3、a 追加内容

    f = open('bb.txt',encoding='utf-8',mode='a')
    f.write('我最帅')
    f.close()
    
    # 没有文件创建文件,追加内容,有文件再文件末尾追加内容
    

    3.4、r+ 读写,先读后写,在光标后添加内容

    f = open('bb.txt',encoding='utf-8',mode='r+')
    content = f.read()
    print(content)
    f.write('我最帅')
    f.close()
    

    四、其他功能

    4.1 、tell() 获取光标的位置,单位为字节

    f = open('bb.txt',encoding='utf-8',mode='r')
    print(f.tell())
    content = f.read()
    print(content)
    print(f.tell())
    f.close()
    
    

    4.2、 seek() 调整光标的位置

    f = open('bb.txt',encoding='utf-8',mode='r')
    f.seek(82) #移动光标的82字节的位置
    print(f.tell())
    content = f.read()
    print(content)
    print(f.tell())
    f.close()
    
    

    4.3、flush 强制刷新

    f = open('文件的写',encoding='utf-8',mode='w')
    f.write('随便写一点')
    f.flush()
    f.close()
    
    # 在write后跟一个flush强制保存
    

    五、with 打开文件的另一种方式

    with open('bb.txt',encoding='utf-8',mode='r') as f:
        print(f.read())
    
    
    with open('bb.txt', encoding='utf-8', mode='r') as f, open('文件的写', encoding='utf-8', mode='w') as f1:
        print(f.read())
        f1.write('我最帅')
        
    # 优点,不用每次手动关闭文件,可以同时操作多个文件
    

    六、文件的修改操作

    1. 以读得模式打开源文件

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

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

    4. 将源文件删除

    5. 将新文件从命名成源文件

    # low版,缺点是同时加载文件所有内容,文件太大是,内存会比较紧张
    import  os
    # 1. 以读得模式打开源文件
    # 2. 以写得模式创建一个新文件
    with open('bb.txt',encoding='utf-8',mode='r') as f, 
        open('bb.txt_bak',encoding='utf-8',mode='w') as f1:
    
    # 3.将源文件的内容读出来修改成新内容,写入新文件
        old_content = f.read()
        new_content =  old_content.replace('我最帅','我牛逼')
        f1.write(new_content)
    # 4. 将源文件删除
    # 5. 将新文件从命名成源文件
    os.remove('bb.txt')
    os.rename('bb.txt_bak','bb.txt')
    
    
    
    
    # 改进版, 逐行循环,逐行修改
    import  os
    # 1. 以读得模式打开源文件
    # 2. 以写得模式创建一个新文件
    with open('bb.txt',encoding='utf-8',mode='r') as f, 
        open('bb.txt_bak',encoding='utf-8',mode='w') as f1:
    
    # 1.将源文件的内容读出来修改成新内容,写入新文件
        for line in f:
            # 逐行循环,逐行修改
            new_line =  line.replace('我牛逼','我最帅')
            f1.write(new_line) 
    os.remove('bb.txt')
    os.rename('bb.txt_bak','bb.txt')
    
  • 相关阅读:
    IOS面试题
    iOS开发多线程篇—线程的状态
    iOS开发多线程篇—GCD介绍
    iOS开发多线程篇—线程间的通信
    iOS开发多线程篇—线程安全
    iOS开发多线程篇—创建线程
    iOS开发多线程篇—多线程简单介绍
    iOS开发UI篇—Quartz2D使用(绘制基本图形)
    iOS开发UI篇—Quartz2D(自定义UIImageView控件)
    iOS开发UI篇—核心动画(UIView封装动画)
  • 原文地址:https://www.cnblogs.com/jiangjunwang/p/13382699.html
Copyright © 2011-2022 走看看