一。文件模式

  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 文件操作的更多相关文章

  1. 【.NET深呼吸】Zip文件操作(1):创建和读取zip文档

    .net的IO操作支持对zip文件的创建.读写和更新.使用起来也比较简单,.net的一向作风,东西都准备好了,至于如何使用,请看着办. 要对zip文件进行操作,主要用到以下三个类: 1.ZipFile ...

  2. 野路子出身PowerShell 文件操作实用功能

    本文出处:http://www.cnblogs.com/wy123/p/6129498.html 因工作需要,处理一批文件,本想写C#来处理的,后来想想这个是PowerShell的天职,索性就网上各种 ...

  3. Node基础篇(文件操作)

    文件操作 相关模块 Node内核提供了很多与文件操作相关的模块,每个模块都提供了一些最基本的操作API,在NPM中也有社区提供的功能包 fs: 基础的文件操作 API path: 提供和路径相关的操作 ...

  4. 归档NSKeyedArchiver解归档NSKeyedUnarchiver与文件管理类NSFileManager (文件操作)

    ========================== 文件操作 ========================== 一.归档NSKeyedArchiver 1.第一种方式:存储一种数据. // 归档 ...

  5. SQL Server附加数据库报错:无法打开物理文件,操作系统错误5

    问题描述:      附加数据时,提示无法打开物理文件,操作系统错误5.如下图: 问题原因:可能是文件访问权限方面的问题. 解决方案:找到数据库的mdf和ldf文件,赋予权限即可.如下图: 找到mdf ...

  6. 通过cmd完成FTP上传文件操作

    一直使用 FileZilla 这个工具进行相关的 FTP 操作,而在某一次版本升级之后,发现不太好用了,连接老是掉,再后来完全连接不上去. 改用了一段时间的 Web 版的 FTP 工具,后来那个页面也 ...

  7. Linux文件操作的主要接口API及相关细节

    操作系统API: 1.API是一些函数,这些函数是由linux系统提供支持的,由应用层程序来使用,应用层程序通过调用API来调用操作系统中的各种功能,来干活 文件操作的一般步骤: 1.在linux系统 ...

  8. C语言的fopen函数(文件操作/读写)

    头文件:#include <stdio.h> fopen()是一个常用的函数,用来以指定的方式打开文件,其原型为:    FILE * fopen(const char * path, c ...

  9. Python的文件操作

    文件操作,顾名思义,就是对磁盘上已经存在的文件进行各种操作,文本文件就是读和写. 1. 文件的操作流程 (1)打开文件,得到文件句柄并赋值给一个变量 (2)通过句柄对文件进行操作 (3)关闭文件 现有 ...

随机推荐

  1. Jenkins根据svn版本号进行构建

    在svn版本url后面加上“@svn版本号”,如@2105 原文:https://blog.csdn.net/jlminghui/article/details/40426849

  2. git报错_you are not allowed to push code to protected branches on this project

    问题描述 今天在提交代码的时候,由于使用的是新库,写完代码后,进行push,发现报错 you are not allowed to push code to protected branches on ...

  3. 作业一(python初认识)

    一.python发展历史 1989,为了度过圣诞假期,Guido开始编写Python语言编译器.Python这个名字来自Guido的喜爱的电视连续剧<蒙蒂蟒蛇的飞行马戏团>.他希望新的语言 ...

  4. react细节

    1.在函数式组件中使用 类型和默认值 function App({ name }) { return ( <div> <h1>{name}</h1> </di ...

  5. Codeforces Round #597 (Div. 2) C. Constanze's Machine dp

    C. Constanze's Machine Constanze is the smartest girl in her village but she has bad eyesight. One d ...

  6. 公式推导【BACF//ICCV2017】

    HK Galoogahi, A Fagg, S Lucey. Learning Background-Aware Correlation Filters for Visual Tracking[C]. ...

  7. MMM的又一周计划[2019 7.1→2019.7.7]

    发现今天是7.1然后又是星期一 来一发吧 本周目标: 1.二分图最佳匹配 2.网络流 3.HH的项链 4.洛谷rk前1000(目前1.1k) (upd:469) 5.AC260(35题,上周A了34, ...

  8. 微信小程序开发语音识别文字教程

    微信小程序开发语音识别文字教程 现在后台 添加插件 微信同声传译 然后app.json 加入插件 "plugins": { "WechatSI": { &quo ...

  9. 奥展项目笔记06--js弹出框、对话框、提示框、弹窗总结

    JS的三种最常见的对话框: //====================== JS最常用三种弹出对话框 ======================== //弹出对话框并输出一段提示信息 functi ...

  10. 使用LocalDateTime计算两个时间的差

    LocalDateTime now = LocalDateTime.now();System.out.println("计算两个时间的差:");LocalDateTime end ...