第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':\n").strip(' \r\n')
    if len(filename)==0:filename=r'c:\temp\test.txt'
    
    while True:
        mode=input("请输入文件读写模式:\n").strip(' \r\n')
        print(f"文件读写信息如下:\n    文件名:{filename}  \n    读写模式:{mode}")
        try:
            fp = open(filename,mode)
        except FileNotFoundError:
            print(f"文件{filename} 不存在!")
            return
        except Exception as e:
            print(f"文件《{filename}》读写打开失败,异常信息如下:\n{e}")  
            continue
        else:break
     
    while True:  
        pos=input("请输入偏移量计算参考位置(0:文件开头,1:当前位置,2:文件结尾,缺省为文件开头,其他值退出循环):").strip(" \r\n")
        
        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(" \r\n")
        if not offset:offset=0
        else:offset = int(offset)
        print(f"文件读写信息如下:\n    文件名:{filename}  \n    读写模式:{mode}  偏移量计算参考位置:{pos} ,文件偏移量:{offset}")
        try:    
            fp.seek(offset,pos)
        except Exception as e:
            print("定位写入位置失败,异常情况如下:\n{e}")
            continue
        
        buff=input("请输入需要写入文件的数据(exit退出,回车忽略):")
        choice = buff.strip(' \r\n')
        if choice=='exit':
            print("结束循环,准备退出")
            break;
        elif not choice: continue
        if mode.find('b')>-1:fp.write(buff.encode())
        else:fp.write(buff)
        print(f"写入内容如下:\n{buff}")
    fp.close()
    print("程序退出!")

dealfile()

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

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

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

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

posted on 2019-08-02 07:32  老猿Python  阅读(161)  评论(0编辑  收藏  举报