• Python全栈-第八课 学习笔记


    Python第八课 学习笔记

    文件操作的初识

    • 如何利用python代码写一个软件,去操作文件。

      • 文件路径:path

      • 打开方式:读,写,追加,读写,写读......

      • 编码方式:utf-8,gbk ,gb2312......

      • #打开文件并读取
        f1 = open('d:123.txt',encoding='utf-8',mode='r')
        content = f1.read()
        print(content)
        f1.close()
        
    • 代码解释:

      • open()内置函数,open底层调用的是操作系统的接口。
        f1,变量,f1,fh,file_handler,f_h,文件句柄。对文件进行的任何操作,都得通过文件句柄. 的方式。
        encoding:可以不写,不写参数,默认编码本:操作系统的默认的编码
        windows: gbk or utf-8
        linux: utf-8
        mac : utf-8
        f1.close() 关闭文件句柄。
        
    • 文件操作的三部曲:

      • 1、打开文件。
      • 2、对文件句柄进行相应操作。
      • 3、关闭文件。
    • 报错原因:

      • UnicodeDecodeError:文件存储时与文件打开时编码本使用不一致。

      • 第二个错误: 路径分隔符产生的问题:

        • 解决方式1(加 使转义字符无效)
          C:\UsersoldboyDesktop123.txt'
          解决方式2(加r')
          r'C:UsersoldboyDesktop123.txt'
          

    文件操作的读写追加

    • r , rb, r+,r+b 四种模式
    • r: read()、read(n)、readline()、readlines()
    • for循环读
    • rb: 操作的是非文本的文件。比如图片,视频,音频。
    #.read() 全部读出来
    f = open('文件的读', encoding='utf-8')
    content = f.read()
    print(content,type(content))
    f.close()
    
    #.read(n) 按照字符读取,读出n个字符
    f = open('文件的读', encoding='utf-8')
    content = f.read(5)
    print(content)
    f.close()
    
    #.readline() 按照一行行读
    f = open('文件的读', encoding='utf-8')
    print(f.readline())
    print(f.readline())
    print(f.readline())
    f.close()
    
    #.readlines() 返回一个列表,列表中的每个元素是源文件的每一行。
    f = open('文件的读', encoding='utf-8')
    l1 = f.readlines()
    print(l1)
    f.close()
    
    #for循环读取(大文件)
    f = open('文件的读', encoding='utf-8')
    #['12
    ', '34
    ', '56
    ', '78
    ', '910
    ']
    for line in f:
    	print(line)
    f.close()
    
    f = open('美女.jpg',mode='rb')
    content = f.read()
    print(content)
    f.close()
    
    • 文件操作的写
    • w,wb, w+,w+b 四种模式
    • wb: 操作的是非文本的文件。比如图片,视频,音频。
    # 没有文件,创建文件,写入内容
    f = open('文件的写',encoding='utf-8',mode='w')
    f.write('随便写一点')
    f.close()
    
    # 如果文件存在,先清空原文件内容,在写入新内容
    f = open('文件的写',encoding='utf-8',mode='w')
    f.write('随便写一点点')
    f.close()
    
    # wb(两个步骤相当于复制一张图片的过程)
    f = open('美女.jpg',mode='rb')
    content = f.read()
    print(content)
    f.close()
    
    f1 = open('美女2.jpg',mode='wb')
    f1.write(content)
    f1.close()
    
    • 文件操作的追加
    • a, ab, a+,a+b 四种模式
    # 没有文件创建文件,追加内容
    f = open('文件的追加',encoding='utf-8',mode='a')
    f.write('123456')
    f.close()
    
    # 有文件,在原文件的最后面追加内容。
    f = open('文件的追加',encoding='utf-8',mode='a')
    f.write('654321')
    f.close()
    
    • 文件操作的其他模式 r+
    # 读并追加 (顺序不能错误。)
    f = open('文件的读写', encoding='utf-8', mode='r+')
    content = f.read()
    print(content)
    f.write('人的一切痛苦,本质都是对于自己无能的愤怒。')
    f.close()
    
    # 错误示例(先写再读)(utf-8中文三个字节,英文一个字节,先读时换行和标点对不上都会导致乱码和报错)
    f = open('文件的读写', encoding='utf-8', mode='r+')
    f.write('123456789')
    content = f.read()
    print(content)
    f.close()
    

    文件操作的其他功能

    • 总结:三个大方向
    • 读 四种模式:r,rb,r+,r+b
    • 写 四种模式:w,wb,w+,w+b
    • 追加 四种模式:a, ab,a+,a+b
    • 相应的功能:对文件句柄的操作:read read(n) readline() readlines() write()
    # .tell 获取光标的位置 单位字节。
    f = open('文件的读写', encoding='utf-8')
    print(f.tell())
    content = f.read()
    print(content)
    print(f.tell())
    f.close()
    
    # .seek 调整光标的位置
    f = open('文件的读写', encoding='utf-8')
    f.seek(7)
    content = f.read()
    print(content)
    f.close()
    
    # .flush 强制刷新(强制保存)
    f = open('文件的其他功能', encoding='utf-8',mode='w')
    f.write('123456')
    f.flush()
    f.close()
    
    • 打开文件的另一种方式
    # 优点1:不用手动关闭文件句柄
    with open('文件的读',encoding='utf-8') as f1:
    	print(f1.read())
    
    # 优点2:一个语句操作多个文件句柄
    with open('文件的读', encoding='utf-8') as f1,
    		open('文件的写', encoding='utf-8', mode='w')as f2:
    	print(f1.read())
    	f2.write('123456')
    
    # 缺点:它是在一定时间内关闭。
    
    • 文件操作的改

    • 文件操作改的流程

      • 以读的模式打开原文件
      • 以写的模式创建一个新文件
      • 将原文件的内容读出来修改成新内容,写入新文件
      • 将原文件删除
      • 将新文件重命名成原文件
    • 具体代码:

    #简洁版
    import os
    #1.以读的模式打开原文件。
    #2.以写的模式创建一个新文件。
    with open('文件操作的改',encoding='utf-8') as f1,
    	open('文件操作的改.bak',encoding='utf-8',mode='w') as f2:
    #3.将原文件的内容读出来修改成新内容,写入新文件。
    	old_content = f1.read()
    	new_content = old_content.replace('Jarvis', 'jarvis')
    	f2.write(new_content)
    	os.remove('文件操作的改')
    	os.rename('文件操作的改.bak','文件操作的改')
    
    # 进阶版
    import os
    #1.以读的模式打开原文件。
    #2.以写的模式创建一个新文件。
    with open('alex自述',encoding='utf-8') as f1,
        open('alex自述.bak',encoding='utf-8',mode='w') as f2:
    #3.将原文件的内容读出来修改成新内容,写入新文件。
        for line in f1:
            new_line = line.replace('Jarvis', 'jarvis')
            f2.write(new_line)
    	os.remove('文件操作的改')
    	os.rename('文件操作的改.bak','文件操作的改')
    
    # 有关清空的问题:
    # 关闭文件句柄,再次以w模式打开此文件时,才会清空。
    with open('文件的写', encoding='utf-8',mode='w') as f1:
    	for i in range(9):
    		f1.write('12345')
    
  • 相关阅读:
    JavaScript中的setMonth()方法的小问题 解决:setMonth(month, 1)
    Bootstrap的Model源码详细注释 (转)
    中检测到有潜在危险的 Request.Form 值。
    JQuery EasyUI DataGrid获取当前行
    VS 开发必用插件
    C# MVC模式 404 500页面设置方法
    (转)高性能网页开发的14条军规
    (转)mysql百万级以上查询优化
    Win7/Win8安装"我们无法创建新的分区,也找不到现有的分区"的解决方法
    SQL Server2008 删除登录记录
  • 原文地址:https://www.cnblogs.com/rgz-blog/p/12715118.html
Copyright © 2020-2023  润新知