博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
文件内光标的的移动 文件的修改
阅读量:5050 次
发布时间:2019-06-12

本文共 1362 字,大约阅读时间需要 4 分钟。

大前提:文件内指针的移动是Bytes为单位的,唯独t模式下的read读取内容是以字符为单位的

一、read(3):

  1,。文件打开方式为文本模式时,代表读取3个字符

  2.   文件打开方式为b模式时,代表读取3个字节

二、其余的文件内光标移动都是以字节为单位如seek,tell,truncate

注意:

  1.seek有三种移动方式0 ,1 ,2,其中1,2必须在b模式下进行,但无论哪种模,都是以bytes为单位移动的

        

  2.truncate是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate要在r+或者a+等模式下测试效果

模式控制:

  0:默认的模式,该模式指针代表指针移动的字节数是以文件开头为参照的

  1:该模式代表指针移动的字节数是以当前所在位置为参照的

  2,:该模式代表指针移动的字节数是以文件末尾的位置来参照的

    #强调:其中0模式可以在t或者b模式使用,而1跟2模式只能在b模式下用

#f.tell()查看文件指针当前距离文件开头的位置

#with open('a.txt',mode='rt',encoding='utf-8')as f:

#        f.seek(4.0)

#   print(f.tell)

#   print(f.read)

 

with open ('a.txt',mode='rb') as f

  f.seek(4,0)

  print(f.tell())

  print(f.read().decode('utf-8')

 

文件的修改:

  文件的数据是存放在于硬盘上,因而只存在覆盖,不存在修改一说,我们平时看到的修改文件,都是模拟出来的效果,具体的说有两种实现方式:

方式一:

    将硬盘存放的该文件的内容全部加载到内存,在内存中是可以修改的,修改完毕后,在由内存覆盖到硬盘(word,vim,nodpadd++等编辑器)

import os

with open('a.txt') as read_f,open('.a.txt.swap','w') as write_f:

data=read_f.read() #全部读入内存,如果文件很大,会很卡
data=data.replace('alex','SB') #在内存中完成修改

write_f.write(data) #一次性写入新文件

os.remove('a.txt')

os.rename('.a.txt.swap','a.txt')

方式二:

将硬盘存放的该文件的内容一行一行地读入内存,修改完毕 就写入新文件,最后用新文件覆盖原文件

import os

with open('a.txt') as read_f,open('.a.txt.swap','w') as write_f:

for line in read_f:
line=line.replace('alex','SB')
write_f.write(line)

os.remove('a.txt')

os.rename('.a.txt.swap','a.txt')

 

转载于:https://www.cnblogs.com/frank007/p/9686042.html

你可能感兴趣的文章
【转】排序算法复习(Java实现)(一): 插入,冒泡,选择,Shell,快速排序
查看>>
myeclipse中修改servlet的模板代码
查看>>
js 倒计时10s
查看>>
再次陷入迷惘期的一点感想
查看>>
字符串的常用方法
查看>>
SQL查询语句 常用示例
查看>>
抄写例题作业1
查看>>
Nginx geo模块
查看>>
mingw using pthread
查看>>
centos6.4搭建基于ftp的yum源让本地局域网服务器使用
查看>>
php GD 和图像处理函数, 制作一张图片
查看>>
设计模式第二篇-观察者模式
查看>>
把一元可以分解成几个1毛,2毛,5毛?
查看>>
windows系统安装gcc编译器----c/c++语言编译器
查看>>
12、Oracle中的dual数据表
查看>>
python网络编程-OSI七层模型详解
查看>>
scala 模式匹配详解 2 scala里是怎么实现的?
查看>>
音视频处理中的硬压缩与软压缩
查看>>
STL-map
查看>>
第三周进度条
查看>>