第9.11节 Python中IO模块文件打开读写操作实例
2024-08-24 20:17:44
为了对前面学习的内容进行一个系统化的应用,老猿写了一个程序来进行文件相关操作功能的测试。
一、 测试程序说明
该程序允许测试人员选择一个文件,自己输入文件打开模式、写入文件的位置以及写入内容,程序按照输入尝试进行文件打开和写入,当打开异常或定位文件写入位置异常时会要求重新选择。最后写入文件时判断文件打开模式是否为二进制,以确认写入时的数据是否需要进行编码处理。
二、 老猿验证的一些结论
- xwa模式不能一起出现;
- w模式写入,会覆盖原文件,如果指定偏移量就在对应偏移位置直接写,前面内容直接为ASCII码0;
- x模式下,如果原文件存在,则不能打开文件;
- r+变成可读写;
- a模式下,seek定位没有作用;
- 如果写入文件位置超出文件长度,则文件会自动扩充。
三、 源代码
#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
请大家多多支持,点赞、评论和加关注!谢谢!
最新文章
- 《机器学习实战》 code debug
- CSS实现水平居中的4种思路
- 如何为自己的windows 8系统的电脑更换锁屏壁纸
- VS对路径的访问被拒绝
- linux设备驱动归纳总结(五):3.操作硬件——IO静态映射【转】
- 谈C#中的Delegate
- Docker 第三篇--构建Image
- text绑定(The ";text"; binding)
- 用fluent模拟内循环床气化燃烧(调试过程记录)
- 在SQL Server中用好模糊查询指令LIKE
- 开发环境配置:jdk8的详细安装教程&;&;tomact的详细安装教程&;&;java环境变量的配置&;&;tomcat启动总失败原因
- 2018-2019-2 20165225『网络对抗技术』Exp2:后门原理与实践
- kafka_2.11-2.0.0_安装部署
- CentOS 7 搭建Jumpserver跳板机(堡垒机)
- mysql5.5 报Can't open and lock privilege tables: Table 'mysql.host' doesn't exist
- Java 利用poi生成excel表格
- deepin 下mysql编码问题utf8的解决
- 使用Fiddler发送POST请求
- DevExpress学习03——label控件的背景色问题
- Swift-Debug下打印函数名和行数
热门文章
- 对hadoop之RPC的理解
- 腾讯云--腾讯云sdk-实现脚本修改腾讯云负载均衡权重
- 9.集合set和frozenset冻结集合函数
- 关于mybatis拦截器,对结果集进行拦截
- http 响应 ngx_http_send_header ngx_http_output_filter
- [LeetCode题解]21. 合并两个有序链表 | 递归
- C#高级编程之特性
- powertool
- php 进行图片裁剪
- php(tp5)实现分页效果