一、文件操作

1.tell()方法返回文件的当前位置,即文件指针当前位置。

  • UTF-8 编码格式,一个中文占3个字符
  • GBK 编码格式,一个中文占2个字符
#写入前文件内容如下
"""
秦时明月汉时关
万里长征人未还
但使龙城飞将在
不教胡马度阴山
""" f = open("music","r",encoding="utf8")
print(f.tell())
print(f.read(5))
print(f.tell())
f.close() #打印出结果如下
"""
0 #初始指针在文件头,也就是位置为0的位置上
秦时明月汉 #打印出5个汉字
15 #此时指针位置在15
"""

2.seek()指针从哪里开始写入

file.seek(offset[, whence])
  • offset -- 开始的偏移量,也就是代表需要移动偏移的字节数

  • whence:可选,默认值为 0。给offset参数一个定义,表示要从哪个位置开始偏移;0代表从文件开头开始算起,1代表从当前位置开始算起,2代表从文件末尾算起。
#seek() 参数 whence 默认为 0
f = open("music","r",encoding="utf8")
print(f.read(5))
f.seek(3)
print(f.read(2))
f.close() #结果如下
"""
秦时明月汉
时明
"""
#seek() 参数 whence 为 1
#文件内容如下
"""
秦时明月汉时关
""" f = open("music","rb") #读取模式需为 "rb"
print(f.read(3).decode("utf8")) #读取出的内容解码为 utf8
f.seek(3,1)
print(f.read(3).decode("utf8"))
f.close() #结果如下
"""


"""
#seek() 参数 whence 为 2
#文件内容如下
"""
秦时明月汉时关
""" f = open("music","rb") #读取模式需为 "rb"
print(f.read(3).decode("utf8")) #打印出的结果为汉字需要解码为 utf8
f.seek(-9,2) #指针改成倒数第三个汉字前进行读取
print(f.read(6).decode("utf8")) #从指针位置向后读取两个汉字
f.close() #结果如下
"""

汉时
"""

3.flush()

  • 方法是用来刷新缓冲区的,即将缓冲区中的数据立刻写入文件,同时清空缓冲区,不需要是被动的等待输出缓冲区写入。
  • 一般情况下,文件关闭后会自动刷新缓冲区,但有时你需要在关闭前刷新它,这时就可以使用 flush() 方法。
import time
f = open("music","w",encoding="utf8")
f.write("hello world") #此时写入的内容在(缓冲区)缓存中,并未写入到磁盘中,需要执行后面的 f.close() 才会将内容从缓存中写入到磁盘中
f.flush() #此操作就是提前将缓冲区内的内容写入到磁盘中 time.sleep(10)
f.close()
#方案一
import sys,time
for i in range(30): #进度条类型
sys.stdout.write("*") #此时写入在缓冲区
sys.stdout.flush() #通过 flush() 实时刷新
time.sleep(0.2) #方案二
import time
for i in range(30): #进度条类型
print("*",end="",flush=True)
time.sleep(0.2)

4.truncate()

  • 方法用于截断文件并返回截断的字节长度。
  • 指定长度的话,就从文件的开头开始截断指定长度,其余内容删除;不指定长度的话,就从文件开头开始截断到当前位置,其余内容删除。
#文件内容如下
"""
秦时明月汉时关
万里长征人未还
但使龙城飞将在
不教胡马度阴山
""" #truncate()参数为空时
f = open("music","r+",encoding="utf8")
f.truncate()
print(f.read())
f.close() #输出结果如下
""" """ #truncate()有参数时
f = open("music","r+",encoding="utf8")
f.truncate(15)
print(f.read())
f.close() #输出结果如下
"""
秦时明月汉
"""

最新文章

  1. 常用MIME类型(Flv,Mp4的mime类型设置)(转载)
  2. 搭建java web开发环境、使用eclipse编写第一个java web程序
  3. cut命令
  4. Spring.Scheduling.Quartz 作业的应用(定时任务和循环触发任务)
  5. springMVC+mybatis 进行单元测试时 main SqlSessionFactoryBean - Parsed configuration file: 'class path resource' 无限的读取xml文件
  6. Zerojudge解题经验交流
  7. wxPython简单入门
  8. 13、mysql/触发器
  9. DOM结构学习备忘
  10. Keras如何构造简单的CNN网络
  11. static说明
  12. 关于项目刚才还能运行的,重启Myeclipse就不能运行(报错)的解决方法
  13. 深度剖析Spark分布式执行原理
  14. weather API 天气api接口 收集整理
  15. 五十二、linux 编程——网络介绍
  16. Centos6.10 安装Python 2.7.16
  17. 常用的字符串函数-S
  18. 第九节 JS运动应用
  19. Vue 中的动画特效
  20. Android Studio 中的FindBugs插件使用,轻松帮你发现Bug (转)

热门文章

  1. go 递归函数
  2. 33 File 文件及目录操作
  3. 小程序运行时如何助力传统APP转型?
  4. Hash记录字符串
  5. C - Ivan the Fool and the Probability Theory---div2
  6. [YII2] 3步发送邮件,有图有真相!
  7. # Unity 游戏框架搭建 2019 (三十四、三十五) 9 ~ 10 示例整理
  8. pytorch 中交叉熵损失实现方法
  9. shell脚本:备份数据库、代码上线
  10. 2019-2020-1 20199310《Linux内核原理与分析》第十一周作业