day8_7.8 文件操作
一。文件模式
1.在文件的操作中,也有很多补充 的模式可使用
1.r+,可读可写模式,在此模式中,操作权限时可读可写,这里的写与write模式不一样的是,不再清空文件内容,写的内容添加到文件的后面,而光标依然再读取的操作地方。
2.w+,可写可读模式,此模式读写都可以,但和w一样会在写的时候会将文件原先的内容删除。
3.a+,可追加可读可写模式,此模式读写都可以,是再原先追加的情况下增加读写权限。
2.read()
read()在使用过程中是可以传参数的,当没有参数时,自动默认读取所有文件内容,传入int类型的数字后,会根据数字大小读取相应的字符。
with open('text1','rt',encoding='utf-8') as f:
res=f.read(4)
print(res)
#输出结果>>>我叫mt
这里并非是根据字节数进行读取。
3.seek()
一个英文字符占一个字节,一个中文字符占三个字节。
而seek()函数在操作文本文件时是根据字节数。
seek(offset,whence)
offset:相对偏移量。光标的移动位数,在移动时是按照字节数进行移动。
whence:有三个参数可选,分别代表三个模式:
0,参照文件开头,t和b都可以使用
with open('text1','rt',encoding='utf-8') as f:
f.seek(3,0)
res=f.read(2)
print(res)
#输出结果>>>叫m(我叫mt)
seek在移动光标时根据字节数,所以移动三位就是移动一位中文字。
1,参照光标所在的当前位置,此模式只适用于b模式
with open('text1','rb') as f:
print(f.read(3))
f.seek(3,1)
res=f.read(2)
print(res.decode())
#输出结果>>>b'\xe6\x88\x91'
#mt(我叫mt)
2,参照光标文件的末尾,此模式只能在b模式下使用
with open('text1','rb') as f:
f.read()
f.seek(-3,2)
res=f.read(3)
print(res)
print(str(res,encoding='utf-8'))
#输出结果>>>b'\xe4\xbd\xa0'
#你(我叫mt你你你)
小总结:在普通文本文件操作r模式下,read(1)代表的是读取的是一个字符,无论是中文还是英文,在b模式下读取的也是,一个字符相当于一个字节。seek()函数中位移光标是按照字节移动,三个模式中0模式可以在任意情况下使用,1,2模式只能在b模式下使用。
例子
使用文件操作,当文本文件添加新内容时,将添加的内容显示出来
首先定义添加内容的过程:
import time
res = time.strftime('%Y-%m-%d %X')
# print(res,type(res))
with open(r'test01.txt','a',encoding='utf-8') as f:
f.write('%s 老板发了1个亿的工资\n'%res)
在将指针移到文件末端,循环读取一行内容,查看其内容:
with open(r'test01.txt',mode='rt',encoding='utf-8') as f:
f.read()
while True:
res=f.readline()
if res:
print('新增内容%s'%res)
4.truncate(x)截断文件
将x所标记的字节位之前的保留,其他内容全部删除。
with open(r'test01.txt','a',encoding='utf-8') as f:
f.truncate(6) # 接收的字节的长度 整型
# 保留0~6字节数 后面的全部删除(截断)
#输出结果>>>我叫(我叫mt,我是无敌的)
5.修改文件操作
在修改文件操作中,一般有两种方式。
1.(1)先将数据从硬盘读取到内存,
(2)在内存中进行修改
(3)将新的内容覆盖到旧的文件中
with open('test01.txt',mode='r',encoding='utf-8') as f:
data=f.read()
with open('test01.txt',mode='w',encoding='utf-8') as f2:
f2.write(data.replace("lzx",'yzy'))
上代码中把‘lzx’替换成了’yzy‘,这种方式对内存的负担很大,在程序中,将文件的所有数据都保存在了data中,所以这个方法很耗内存。
2.(1)创建一个新的文件
(2)循环读取需要修改的文件,在内存中修改完后,将数据保存到新文件中
(3)将老文件删除,新文件的名字改成老文件的名字
为了完成这个程序,需要使用os包,中对文件名进行修改,
import os
with open('test01.txt',mode='rt',encoding='utf-8') as f,\
open('test01.swap',mode='wt',encoding='utf-8') as f2:
for i in f:
if 'yzy' in i:
f2.write(i.replace('yzy','lzx'))
if 'yzy' not in i:
f2.write(i)
os.remove('test01.txt')
os.rename('test01.swap','test01.txt')
day8_7.8 文件操作的更多相关文章
- 【.NET深呼吸】Zip文件操作(1):创建和读取zip文档
.net的IO操作支持对zip文件的创建.读写和更新.使用起来也比较简单,.net的一向作风,东西都准备好了,至于如何使用,请看着办. 要对zip文件进行操作,主要用到以下三个类: 1.ZipFile ...
- 野路子出身PowerShell 文件操作实用功能
本文出处:http://www.cnblogs.com/wy123/p/6129498.html 因工作需要,处理一批文件,本想写C#来处理的,后来想想这个是PowerShell的天职,索性就网上各种 ...
- Node基础篇(文件操作)
文件操作 相关模块 Node内核提供了很多与文件操作相关的模块,每个模块都提供了一些最基本的操作API,在NPM中也有社区提供的功能包 fs: 基础的文件操作 API path: 提供和路径相关的操作 ...
- 归档NSKeyedArchiver解归档NSKeyedUnarchiver与文件管理类NSFileManager (文件操作)
========================== 文件操作 ========================== 一.归档NSKeyedArchiver 1.第一种方式:存储一种数据. // 归档 ...
- SQL Server附加数据库报错:无法打开物理文件,操作系统错误5
问题描述: 附加数据时,提示无法打开物理文件,操作系统错误5.如下图: 问题原因:可能是文件访问权限方面的问题. 解决方案:找到数据库的mdf和ldf文件,赋予权限即可.如下图: 找到mdf ...
- 通过cmd完成FTP上传文件操作
一直使用 FileZilla 这个工具进行相关的 FTP 操作,而在某一次版本升级之后,发现不太好用了,连接老是掉,再后来完全连接不上去. 改用了一段时间的 Web 版的 FTP 工具,后来那个页面也 ...
- Linux文件操作的主要接口API及相关细节
操作系统API: 1.API是一些函数,这些函数是由linux系统提供支持的,由应用层程序来使用,应用层程序通过调用API来调用操作系统中的各种功能,来干活 文件操作的一般步骤: 1.在linux系统 ...
- C语言的fopen函数(文件操作/读写)
头文件:#include <stdio.h> fopen()是一个常用的函数,用来以指定的方式打开文件,其原型为: FILE * fopen(const char * path, c ...
- Python的文件操作
文件操作,顾名思义,就是对磁盘上已经存在的文件进行各种操作,文本文件就是读和写. 1. 文件的操作流程 (1)打开文件,得到文件句柄并赋值给一个变量 (2)通过句柄对文件进行操作 (3)关闭文件 现有 ...
随机推荐
- 短信控制的 智能插头(sim900a arduino uno)
https://www.arduino.cn/thread-19432-1-2.html 1.所需工具:(1)arduino UNO,(2)sim900a模块,(3)单路继电器,(4)220v ac转 ...
- python实现异步调用函数执行
在实现异步调用之前我们先进行什么是同步调用和异步调用 同步:是指完成事务的逻辑,先执行第一个事务,如果阻塞了,会一直等待,直到这个事务完成,再执行第二个事务,顺序执行 异步:是和同步相对的,异步是指在 ...
- JVM&NIO&HashMap简单问
JVM&NIO&HashMap简单问 背景:前几天在网上看到关于JVM&NIO&HashMap的一些连环炮的面试题,整理下以备不时之需. 一.JVM Java的虚拟机的 ...
- PMP132种工具与技术
<PMBOK ® 指南>第六版中共包括 132 种工具与技术 <PMBOK ® 指南>使用了以下工具与技术分组:1.数据收集技术.用于从各种渠道收集数据与信息.共有9 种数据收 ...
- JSONObject解析json数据
首先先看一下我们要解析的json数据是什么样子的: 代码: String url="http://113.57.190.228:8001/Web/Report/GetBigMSKReport ...
- spring boot测试类自动注入service或dao
使用Spring Boot进行单元测试时,发现使用@Autowired注解的类无法自动注入,当使用这个类的实例的时候,报出NullPointerException,即空指针异常. Spring Boo ...
- Elasticsearch 中映射参数doc_values 和 fielddata分析比较
doc_values 默认情况下,大部分字段是索引的,这样让这些字段可被搜索.倒排索引(inverted index)允许查询请求在词项列表中查找搜索项(search term),并立即获得包含该词项 ...
- webapi 集成swagger
参考资料:Stack Overflow 我自己写的demo:SwaggerDemoApi 在已有的webapi项目或者创建webapi项目中,打开nuget管理器 搜索:swagger 安装截图中的插 ...
- css3伪类和伪元素你都懂了吗
什么是伪类? 伪类用于定义元素的特殊状态. 例如,它可用于: 当用户将鼠标悬停在元素上时为其设置样式 访问和未访问的链接不同样式 在获得焦点时设置元素的样式 伪类的语法 后代选择器匹配作为指定元素后代 ...
- vue cli 3.0快速创建项目
本地安装vue-cli 前置条件 更新npm到最新版本 命令行运行: npm install -g npmnpm就自动为我们更新到最新版本 淘宝npm镜像使用方法 npm config set reg ...