第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

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

原文地址:https://www.cnblogs.com/LaoYuanPython/p/13643683.html