python文件操作:文件指针移动、修改
一、文件指针移动
#大前提:文件内指针的移动是Bytes为单位的,唯独t模式下的read读取内容个数是以字符为单位
# f.read(3)
# with open('a.txt',mode='rt',encoding='utf-8') as f:
# data=f.read(3)
# print(data) # with open('a.txt',mode='rb') as f:
# data=f.read(3)
# print(data.decode('utf-8'))
f.seek(指针移动的字节数,模式控制): 控制文件指针的移动
模式控制:
0: 默认的模式,该模式代表指针移动的字节数是以文件开头为参照的
1: 该模式代表指针移动的字节数是以当前所在的位置为参照的1
2: 该模式代表指针移动的字节数是以文件末尾的位置为参照的
强调:其中0模式可以在t或者b模式使用,而1跟2模式只能在b模式下用 f.tell()查看文件指针当前距离文件开头的位置
# 0模式详解
# 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)
# f.seek(2,0)
# print(f.tell())
# print(f.read().decode('utf-8')) # with open('a.txt',mode='rt',encoding='utf-8') as f:
# f.seek(5,0)
# print(f.read()) # 1模式详解
# with open('a.txt',mode='rb') as f:
# f.seek(3,1)
# print(f.tell())
# f.seek(4,1)
# print(f.tell())
# print(f.read().decode('utf-8')) # 2模式详解
# with open('a.txt',mode='rb') as f:
# f.seek(-9,2)
# data=f.read()
# print(data.decode('utf-8')) # tail -f access.log
with open('access.log',mode='rb') as f:
f.seek(0,2)
while True:
line=f.readline()
if len(line) == 0:
# 没有内容
continue
else:
print(line.decode('utf-8'),end='')
二、文件修改
须知一:
硬盘空间无法修改,硬盘中的数据更新都是用新的内容覆盖旧的内容
内存控制可以修改
with open('a.txt','r+t',encoding='utf-8') as f:
f.seek(4,0)
print(f.tell())
f.write('我擦嘞')
须知二:
文件对应的是硬盘空间,硬盘不能修改应为文件本质也不能修改,
我们看到文件的内容可以修改,是如何实现的呢?
大的的思路:将硬盘中文件内容读入内存,然后在内存中修改完毕后再覆盖回硬盘
具体的实现方式分为两种:
# 1. 将文件内容发一次性全部读入内存,然后在内存中修改完毕后再覆盖写回原文件
# 优点: 在文件修改过程中同一份数据只有一份
# 缺点: 会过多地占用内存
# with open('db.txt',mode='rt',encoding='utf-8') as f:
# data=f.read() # with open('db.txt',mode='wt',encoding='utf-8') as f:
# f.write(data.replace('kevin','SB')) # 2. 以读的方式打开原文件,以写的方式打开一个临时文件,一行行读取原文件内容,修改完后写入临时文件...,删掉原文件,将临时文件重命名原文件名
# 优点: 不会占用过多的内存
# 缺点: 在文件修改过程中同一份数据存了两份
import os with open('db.txt',mode='rt',encoding='utf-8') as read_f,\
open('.db.txt.swap',mode='wt',encoding='utf-8') as wrife_f:
for line in read_f:
wrife_f.write(line.replace('SB','kevin')) os.remove('db.txt')
os.rename('.db.txt.swap','db.txt')
python文件操作:文件指针移动、修改的更多相关文章
- python读写操作文件
with open(xxx,'r,coding='utf-8') as f: #打开文件赋值给F ,并且执行完了之后不需要 f.close(). 在Python 2.7 及以后,with又支持同时 ...
- 字符编码和Python代码操作文件
字符编码和Python代码操作文件 读写模式之a模式 # a模式 只追加模式 # 路径不存在:自动创建 with open(r'a.txt','a',encoding='utf8') as f: pa ...
- 在Python中操作文件之truncate()方法的使用教程
在Python中操作文件之truncate()方法的使用教程 这篇文章主要介绍了在Python中操作文件之truncate()方法的使用教程,是Python入门学习中的基础知识,需要的朋友可以参考下 ...
- python 关于操作文件的相关模块(os,sys,shutil,subprocess,configparser)
一:os模块 os模块提供了许多允许你程序与操作系统直接交互的功能 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname&quo ...
- 文件操作mode学习总结-----Python学习总结【第四篇】:Python之文件操作(文件、正则、json、pickle)
非常全的博客,防丢链接参考https://www.cnblogs.com/madsnotes/articles/5521551.html 1.文件操作 1.1 操作流程 1)文件打开 2)文件操作 3 ...
- python关于操作文件的相关模块(os,sys,shutil,subprocess,configparser)
一:os模块 os模块提供了许多允许你程序与操作系统直接交互的功能 功能 说明 os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirna ...
- Python:操作文件
python操作文件库不需要安装其他module,文件操作类库是python语言自身支持的操作. 判定文件是否存在:os.path.isfile(filePath) import os import ...
- python 文件操作: 文件操作的函数, 模式及常用操作.
1.文件操作的函数: open("文件名(路径)", mode = '模式', encoding = "字符集") 2.模式: r , w , a , r+ , ...
- Python open操作文件
操作文件 # coding=utf-8 支持中文 """ China Japan France England """ f = open(& ...
- ASP.NET中的文件操作(文件信息,新建,移动,复制,重命名,上传,遍历)(亲测详细)
做了几天的文件操作,现在来总结一下,错误之处,还望指点!以文件为例,如果对文件夹操作,基本上将File换为Directory即可(例:FileInfo file = new FileInfo(Path ...
随机推荐
- 【图像处理】H.264有四种画质级别
H.264有四种画质级别,分别是BP.EP.MP.HP,想要说明H.264 HP与H.264 MP的区别就要讲到H.264的技术发展了 H.264 视频编码技术在视频采集.后期制作等网络视频服务领域的 ...
- 前端CSS实现图片自适应背景大小
<body> <div> <!--背景图片--> <div id="web_bg" style="background-imag ...
- [转帖]NM_CONTROLLED的含义以及网卡配置参数
NM_CONTROLLED的含义以及网卡配置参数 https://blog.csdn.net/z1014347942/article/details/78069966 学习一下 其实可以手工修改的. ...
- chrome xpath调试
- javascript的一些有用函数记录,不断更新。。。
addLoadEvent函数: 众所周知,html文档加载完后会立即执行一个onload函数.但是onload函数只能包含一个被执行的函数,也就是你需要在加载完文档后执行的一个自己的函数.在实际中ht ...
- python-面向对象速查表-内置方法-内置函数-内置属性(只整理了部分内容)
今日临时总结的内容,可能还有些不正确的地方,初步当做个速查表吧. 类的内置函数(继承object的,自己重写) 内置函数 执行时机 注意点 调用案例 __init__ 实例化对象时 不允许写返回值(r ...
- nignx简单介绍
Nginx的产生 没有听过Nginx?那么一定听过它的"同行"Apache吧!Nginx同Apache一样都是一种WEB服务器.基于REST架构风格,以统一资源描述符(Unifor ...
- Scala学习五——类
一.本章要点 类中的字段自动带有getter方法和setter方法 你可以用定制的getter/setter方法替换掉字段的定义,而不必修改使用类的客户端——这就是所谓的”统一访问原则“ 用@Bean ...
- webpack权限控制
const type= "a"; const menusConfig = { a: ["activity"], b: ["activity" ...
- Datetime 在C#中的用法 获取当前时间的各种格式
DateTime 获得当前系统时间: DateTime dt = DateTime.Now; Environment.TickCount可以得到“系统启动到现在”的毫秒值 DateTime now = ...