为了对前面学习的内容进行一个系统化的应用,老猿写了一个程序来进行文件相关操作功能的测试。

一、 测试程序说明

该程序允许测试人员选择一个文件,自己输入文件打开模式、写入文件的位置以及写入内容,程序按照输入尝试进行文件打开和写入,当打开异常或定位文件写入位置异常时会要求重新选择。最后写入文件时判断文件打开模式是否为二进制,以确认写入时的数据是否需要进行编码处理。

二、 老猿验证的一些结论

  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


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

第9.11节 Python中IO模块文件打开读写操作实例的更多相关文章

  1. 第9.10节 Python中IO模块其他文件操作属性和方法简介

    本文中所有案例中的fp都是使用open函数打开文件返回的一个文件对象,为了节省篇幅,大部分没有提供文件打开的代码. 一. 文件是否关闭的属性 属性名:closed 功用:判断文件是否关闭 示例: &g ...

  2. 第11.18节 Python 中re模块的匹配对象

    匹配对象是Python中re模块正则表达式匹配处理的返回结果,用于存放匹配的情况.老猿认为匹配对象更多的应该是与组匹配模式的功能对应的,只是没有使用组匹配模式的正则表达式整体作为组0. 为了说明下面的 ...

  3. 第14.11节 Python中使用BeautifulSoup解析http报文:使用查找方法快速定位内容

    一. 引言 在<第14.10节 Python中使用BeautifulSoup解析http报文:html标签相关属性的访问>介绍了BeautifulSoup对象的主要属性,通过这些属性可以访 ...

  4. python中常用的文件和目录操作(一)

    常用的文件操作 1. 打开文件 open,它是一个内置函数,可以直接调用 语法:file object = open(file_name, [access_mode]),这里我们会创建一个file对象 ...

  5. 第11.23节 Python 中re模块的搜索替换功能:sub及subn函数

    一. 引言 在<第11.3节 Python正则表达式搜索支持函数search.match.fullmatch.findall.finditer>重点介绍了几个搜索函数,除了搜索,re模块也 ...

  6. 第11.22节 Python 中re模块的字符串分割器:split函数

    一. 引言 在<第11.2节 Python 正则表达式支持函数概览>介绍了re模块的主要函数,在<第11.3节 Python正则表达式搜索支持函数search.match.fullm ...

  7. java IO流文件的读写具体实例(转载)

    引言: 关于java IO流的操作是非常常见的,基本上每个项目都会用到,每次遇到都是去网上找一找就行了,屡试不爽.上次突然一个同事问了我java文件的读取,我一下子就懵了第一反应就是去网上找,虽然也能 ...

  8. 第11.24节 Python 中re模块的其他函数

    一. re.compile函数 正则表达式编译函数,在后面章节专门介绍. 二. re.escape(pattern) re.escape是一个工具函数,用于对字符串pattern中所有可能被视为正则表 ...

  9. python中常用的文件和目录操作(二)

    一. os模块概述 python os模块提供了非常丰富的方法用来处理文件和目录 二. 导入os模块: import os 三. 常用方法 1. os.name 输出字符串表示正在使用的平台,如果是w ...

随机推荐

  1. Vue常用性能优化

    Vue常用性能优化 Vue常用的一些优化方式,主要是在构建项目过程需要注意的方面. 编码优化 避免响应所有数据 不要将所有的数据都放到data中,data中的数据都会增加getter和setter,并 ...

  2. gcc 执行c++报错

    D:\cpp>g++ hello.cc Info: resolving std::cout by linking to __imp___ZSt4cout (auto-import) c:/min ...

  3. CSS兼容性总结一点点

    CSS3的兼容性,除了前缀.还有参数格式的区分,因为仍在变化中,不在这篇文章中讨论. 很想总结一下IE 6 7 8 9 10的兼容性问题,但是我实在不喜欢IE 6 7 8,在Web开发上也很少再调整到 ...

  4. Docker - 解决 Error response from daemon: driver failed programming external connectivity on endpoint tomcat9999

    问题背景 执行 docker start tomcat 报以下的错误 Error response from daemon: driver failed programming external co ...

  5. 为什么人们总是认为epoll 效率比select高!!!!!!

    今天看公司代码时,发现代码里面使用的事清一色的代码使用epoll, 所以就得说一说了:宏观看一看epoll 和select的实现: select原理概述 调用select时,会发生以下事情: 从用户空 ...

  6. Netlink 内核实现分析 2

    netlink 应用层如何创建socket 应用层通过socket()系统调用创建Netlink套接字,socket系统调用的第一个参数可以是AF_NETLINK或PF_NETLINK(在Linux系 ...

  7. c++ priority_queue应用(重要)

    自定义排序 重写仿函数 struct cmp{ bool operator() ( Node a, Node b ){//默认是less函数 //返回true时,a的优先级低于b的优先级(a排在b的后 ...

  8. 守护进程详解以及start-stop-daemon命令

    1.概念:守护进程是在后台运行的不受终端控制的进程,通常守护进程在系统启动时自动运行,守护进程的名称通常以d结尾,比如sshd.xinetd.crond等. 2.创建守护进程的步骤:a.调用fork( ...

  9. 深入理解h2和r2dbc-h2

    简介 本文将会介绍R2DBC的H2实现r2dbc-h2的使用方法和要注意的事项.一起来看看吧. H2数据库简介 什么是H2数据库呢? H2是一个Java SQL database,它是一个开源的数据库 ...

  10. linux 更改mysql 数据存储目录

    https://www.cnblogs.com/hellangels333/p/8376177.html  参考位博主的文章,稍做改动 1.检查mysql数据库存放目录 mysql -u root - ...