zoukankan      html  css  js  c++  java
  • 第9.11节 Python中IO模块文件打开读写操作实例

    为了对前面学习的内容进行一个系统化的应用,老猿写了一个程序来进行文件相关操作功能的测试。
    一、 测试程序说明
    该程序允许测试人员选择一个文件,自己输入文件打开模式、写入文件的位置以及写入内容,程序按照输入尝试进行文件打开和写入,当打开异常或定位文件写入位置异常时会要求重新选择。最后写入文件时判断文件打开模式是否为二进制,以确认写入时的数据是否需要进行编码处理。

    二、 老猿验证的一些结论

    1. xwa模式不能一起出现;
    2. w模式写入,会覆盖原文件,如果指定偏移量就在对应偏移位置直接写,前面内容直接为ASCII码0;
    3. x模式下,如果原文件存在,则不能打开文件;
    4. r+变成可读写;
    5. a模式下,seek定位没有作用;
    6. 如果写入文件位置超出文件长度,则文件会自动扩充。

    三、 源代码

    #coding:utf-8         
    #Python文本文件写测试,动态输入文件打开模式和偏移位置
    
    import io
        
    def dealfile():
        filename=input("请输入要读写的文件,回车则默认为'c:\temp\test.txt':
    ").strip(' 
    ')
        if len(filename)==0:filename=r'c:	emp	est.txt'
        
        while True:
            mode=input("请输入文件读写模式:
    ").strip(' 
    ')
            print(f"文件读写信息如下:
        文件名:{filename}  
        读写模式:{mode}")
            try:
                fp = open(filename,mode)
            except FileNotFoundError:
                print(f"文件{filename} 不存在!")
                return
            except Exception as e:
                print(f"文件《{filename}》读写打开失败,异常信息如下:
    {e}")  
                continue
            else:break
         
        while True:  
            pos=input("请输入偏移量计算参考位置(0:文件开头,1:当前位置,2:文件结尾,缺省为文件开头,其他值退出循环):").strip(" 
    ")
            
            if not pos:pos=0
            elif not pos.isdigit():break;
            else: pos = int(pos)
            if pos not in (0,1,2):break
            offset=input("请输入文件写入相对偏移量(缺省为0):").strip(" 
    ")
            if not offset:offset=0
            else:offset = int(offset)
            print(f"文件读写信息如下:
        文件名:{filename}  
        读写模式:{mode}  偏移量计算参考位置:{pos} ,文件偏移量:{offset}")
            try:    
                fp.seek(offset,pos)
            except Exception as e:
                print("定位写入位置失败,异常情况如下:
    {e}")
                continue
            
            buff=input("请输入需要写入文件的数据(exit退出,回车忽略):")
            choice = buff.strip(' 
    ')
            if choice=='exit':
                print("结束循环,准备退出")
                break;
            elif not choice: continue
            if mode.find('b')>-1:fp.write(buff.encode())
            else:fp.write(buff)
            print(f"写入内容如下:
    {buff}")
        fp.close()
        print("程序退出!")
    
    dealfile()
    

    四、 部分测试截屏
    在这里插入图片描述
    执行后读写文件截屏:其中前4行时原文件,后面是新写入内容。
    在这里插入图片描述

    本节提供了一个文件读写测试的程序,介绍了老猿验证的一些结论,并举例介绍了部分测试验证的截屏,大家可以使用该程序自行测试一下文件操作的相关内容。

    老猿Python,跟老猿学Python!
    博客地址:https://blog.csdn.net/LaoYuanPython

    请大家多多支持,点赞、评论和加关注!谢谢!

  • 相关阅读:
    49 我素故我在
    91 棋盘游戏
    55 删除数组重复元素
    54 删除数组元素
    C++虚函数, 纯虚函数
    iOS-OC-多态
    C++函数引用形参和非引用形参
    怎么清理Mac 硬盘里的其他
    Vue.js中this.$nextTick()的使用
    data中有嵌套,取值要链式取
  • 原文地址:https://www.cnblogs.com/LaoYuanPython/p/13643683.html
Copyright © 2011-2022 走看看