任何一种语言,文件的读写都是非常常见的。python的文件读写非常简单,仅仅一个函数open(file也可以,但是我不常用)。

先看看官网的解释:

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)
Open file and return a stream. Raise IOError upon failure.

常用打开模式:

r 只能读
r+ 可读可写,不会创建不存在的文件,从顶部开始写,会覆盖之前此位置的内容
w+ 可读可写,如果文件存在,则覆盖整个文件,不存在则创建
w 只能写,覆盖整个文件,不存在则创建
a 只能写,从文件底部添加内容 不存在则创建
a+ 可读可写 从文件顶部读取内容 从文件底部添加内容 不存在则创建

但是实验发现,这里的r+ 可读可写 不会创建不存在的文件 从顶部开始写 会覆盖之前此位置的内容不完整。

test.txt的原始文件如下:

早上好
您好
how are you?

如果我们在open文件后,没有进行任何读写,则从末尾加入

 with open('test.txt', mode='r+', encoding='utf-8') as f:
f.writelines("北京")

这时文件变成

北京好
您好
how are you?

如果我们在写之前进行了读操作,则会在末尾加入文件

 with open('test.txt', mode='r+', encoding='utf-8') as f:
f.read(1)
f.writelines("北京")

这时在文件的末尾加入了北京两个字,与我们读多少没有关系。作用上类似a+模式

早上好
您好
how are you?北京

注意:以r+模式处理文件,容易弄错内容,千万注意

如果以w+方式打开文件,写入文件后,文件被覆盖或重建,样例

 with open('test.txt', mode='w+', encoding='utf-8') as f:
f.write("tianjin")
f.flush()
print(f.readlines())

得到空[]

with open('test.txt', mode='w+', encoding='utf-8') as f:
f.writelines("天津")
f.writelines('山东')
f.flush()
f.seek(0)
print(f.readlines())

需要seek才能读取到刚刚写入的内容。

另外注意 写操作不会自动加入换行符

读的一行末尾会有换行操作,可以用''.strip()去掉换行符

with open('test.txt', mode='r', encoding='utf-8') as f:
for line in f:
print(line.strip()) 去掉换行

如果某个文件正在open,就只这时,文件被修改,正在读文件的句柄能读出修改的内容

 import time
with open('test.txt', mode='r', encoding='utf-8') as f:
time.sleep(5)
for line in f:
print(line.strip())

在文件末尾增加文件时,我们的f能读取到最后新增的内容。如果修改已经读取行的内容,若不seek,则读取不到。

这特点能用户增量读取分析日志文件

最新文章

  1. .htaccess详解及.htaccess参数说明【转】
  2. python time函数
  3. 配置ogg异构oracle-mysql(2)源端配置
  4. C++的笔记学习第一篇,认识C++
  5. Python 结巴分词模块
  6. iTerm2和oh-my-zsh的个性化定制
  7. MFC 全局配置 读取保存配置
  8. S2SH整合
  9. 你不知道的JavaScript——类型
  10. Redisson分布式锁的简单使用
  11. FFmpeg 结构体学习(五): AVCodec 分析
  12. javaAPI实现elasticsearch5.5.2的聚合分析
  13. React表格报错Each record in table should have a unique `key` prop,or set `rowKey` to an unique primary key.
  14. jupyter notebook中No module named 'tensorflow'
  15. vue中异步函数async和await的用法
  16. linux学习之硬盘的存储原理和内部架构
  17. 【总结】瞬时高并发(秒杀/活动)Redis方案
  18. GsonUtil工具类
  19. topcoder srm 455 div1
  20. 在Java中关于二进制、八进制、十六进制的辨析

热门文章

  1. 【WebSocket初探 】
  2. NhibernateProfiler-写个自动破解工具(源码)
  3. 手机网站keyup解决方案
  4. 回车tab切换
  5. JavaScript精彩范例(1)——Jquery EasyUI应用的一个框架实例
  6. CompareValues标签对Model中的属性进行验证
  7. C#外挂QQ
  8. 编写高质量equals方法
  9. OO设计
  10. C#类的初始化