python读写文件——文件指针操作
读写文件
文件处理步骤:打开文件——处理数据——关闭文件
File=open('文件名称','读取方法')#打开文件
t=File.readline()#读取文件
File.close()#关闭文件
读写文件基本操作
open()#打开文件
read(size)#读取文件长度为size的字符串,如果为给定或者为负则读取全部内容
readline()#读取一行内容,返回字符串,文件读写位置下降一行
readlines()#读取所有行并返回列表
write(s)#将字符串s内容写入文件
writelines(s)#向文件写入一个元素为字符串的列表,如果需要换行则要自己写入每行的换行符
seek(off,whence=0)#设置文件当前读写位置,off表示偏移量,whence代表位置,0从头,1当前,2末尾
tell()#返回文件读写位置
close()#关闭文件
文件指针的相关知识
以w打开文件:只写
import osdef main():file=open('test.txt','w',encoding='utf-8')print(file.tell())file.write('Hello World')print(file.tell())file.write('twice')print(file.tell())file.close()if __name__ == '__main__':main()
运行结果:
这代表写入不会自动换行,需要手动写入
实现换行:
import osdef main():file=open('test.txt','w',encoding='utf-8')print(file.tell())file.write('Hello\n')print(file.tell())file.write('World')print(file.tell())file.close()if __name__ == '__main__':main()
从上述结果中我们可以得知,以w打开文件,若文件已存在那么是会覆盖掉之前的文件的,所以要对已有的文件进行修改是不能通过w来实现的
接下来是修改读写位置:
import osdef main():file=open('test.txt','w',encoding='utf-8')print(file.tell())file.write('Hello\n')print(file.tell())file.write('World')print(file.tell())file.seek(0,0)#从头开始读写文件file.write('test1')file.seek(0,2)#从末尾开始读写文件file.write('test2')file.close()if __name__ == '__main__':main()
可以得知从头开始写文件是会覆盖掉原本头部已经有的内容,末尾是直接增加的
那么如果我想在头部位置增加一行,或者增加修改某一行呢?这个无法通过seek实现,因为你不知道第几行相对于头部或者是尾部的偏移量。一般通过读取全部内容成列表,修改相应内容后在将其写入文件。由于我们需要读取文件,而w的权限不够,w+虽然只比w多了一个写权限,但也会覆盖原有文件,所以采用r+,能读写,不会覆盖原文件。
import osdef main():file=open('test.txt','r+',encoding='utf-8')print(file.tell())lin=file.readlines()lin[1]='101112\n'file.seek(0,0)file.truncate()#清空文件file.writelines(lin)file.close()if __name__ == '__main__':main()
该开始文件内有三行数据
运行程序后文件更改为
注意两点,w打开文件后文件读写位置处于开头位置,偏移量为0。清空文件truncate方法是从当前读写位置到末尾清空,所以要想清空文件需要将读写位置设置到开头。
最后一个问题,读写位置是否是读写操作共有的还是每个操作各一份?
开始时文件内容为一行数据:123456789
import osdef main():file=open('test.txt','r+',encoding='utf-8')print(file.tell())re=file.read(1)#读取4个字节print('读取数据:'+re)print(file.tell())file.write('000')print(file.tell())file.close()if __name__ == '__main__':main()
这个产生的效果很有趣,运行结果:
这个代表读取文件时将文件指针向后移了,但是写的时候会直接将文件指针移到末尾。
再次调用读操作
print('再次读取数据:'+file.read(8))
这个没有读到任何东西,代表读也是从末尾开始读的。综上读写操作公用一个文件指针。但又有一个新的问题,读写操作对文件指针的影响不是单纯的后移几个字节,需要知道他们之间的相互影响。
import osdef main():file=open('test.txt','r+',encoding='utf-8')file.write('9')print(file.tell())re=file.read(1)#读取4个字节print('读取数据:'+re)print(file.tell())file.seek(2,0)file.write('000')print(file.tell())print('再次读取数据:'+file.read(8))file.close()if __name__ == '__main__':main()
运行结果为:
总结
结合这个结果和之前的结果可得规律:
1.开始时文件指针和读写方式的关系
w系列由于都会创建/覆盖之前的文件,所以文件指针都会位于开头
r系列文件指针开始时在开头
a系列文件指针开始时在末尾
2.读写操作对文件指针的影响
刚开始时无论是读操作还是写操作都会从对应打开方式处开始读写。但是如果进行过读操作后再进行写操作写 操作会将文件指针修改文件末尾后再写入数据
python读写文件——文件指针操作相关推荐
- python处理excel教程实例-python 读写excel文件操作示例【附源码下载】
本文实例讲述了python 读写excel文件操作.分享给大家供大家参考,具体如下: 对excel文件的操作,python有第三方的工具包支持,xlutils,在这个工具包中包含了xlrd,xlwt等 ...
- python读csv最快方法_使用Python读写csv文件的三种方法
Python读写csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 前言 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是 ...
- python更新excel内容_[原创]使用 Python 读写 Excel 文件(一)更新
项目要求 如果说是 Office 办公软件使得 Windows 成为主流的操作系统,那么 Excel 就是使得微软硬起来的法宝! Word 和 PowerPoint 都有不相上下的对手,但 Excel ...
- python暴力破解excel_使用 Python 读写 Excel 文件(一)
项目要求 如果说是 Office 办公软件使得 Windows 成为主流的操作系统,那么 Excel 就是使得微软硬起来的法宝! Word 和 PowerPoint 都有不相上下的对手,但 Excel ...
- python读写csv文件方法总结_使用python读写CSV文件的三种方法
Python读写csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 前言 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是 ...
- python 读写数据文件的6种常用方式
本文主要介绍python读写数据文件的6种常用方式. 1. python内置方法 with open(r'test.xlsx') as f:a = f.read() 一般,在应用上述上下文管理器后,可 ...
- python: 读写excel文件
文章目录 python 读写 excel 文件 Excel 文件简略描述 xlwt xlrd xlutils 读写 xlrd 读取 xlwt 写 xlutils 任务练习 python 读写 exce ...
- python读写压缩文件使用gzip和bz2
python读写压缩文件使用gzip和bz2 #读取压缩文件 # gzip compression import gzip with gzip.open('somefile.gz', 'rt') as ...
- python读取csv文件的方法-python读写csv文件的方法
1.爬取豆瓣top250书籍 import requests import json import csv from bs4 import BeautifulSoup books = [] def b ...
- csv 字符串_爬虫|python读写csv文件的方法完成生涯规划表
前面用PrettyTable制作了生涯规划表,今天突然想到其实可以用Python读写Excel文件,还可以制作Excel表格,相对而言,感觉csv的读写更简单,所以决定用csv改写生涯规划案例,以后教 ...
最新文章
- CSS position(定位)属性
- flutter从0到1构建大前端应用 pdf_推荐前端热门GitHub代码库「值得收藏」
- 【Elasticsearch】es IK分词器的安装
- 文件操作(文件指针+顺序/随机读写)
- 猜数字的算法的一个简单实现
- 小凡Dynamips 虚拟pc的使用
- java taglib开发_Java WEB开发实战 之 第六部分:Taglib基本知识和基本开发【私塾在线原创】...
- VB 串口编程 开发心得
- JS加入收藏夹操作代码
- 做数据迁移差点累死的程序员有话要说----数据迁移经验分享
- java 请求https post 接口 绕过证书验证
- 真实世界里的钢铁侠-特斯拉汽车创始人埃隆·马斯克(Elon Musk)
- Android中的UI组件
- 抖音很火的召唤神龙的小游戏完整代码-召唤神龙
- C#winform图片、图标操作
- 局域网传输文件_【电脑篇】巧借局域网,告别第三方工具便捷实现电脑间的文件传输...
- ALEVEL经济学:通货膨胀的原因是什么?
- 飞行对小鸟来说压力很大吗?
- 软件工程-网上商城分析设计(小组项目)
- 关于ant-design-vue的table内嵌输入框性能问题