一、常用

‘r’:只读。该文件必须已存在。

‘r+’:可读可写。该文件必须已存在,写为追加在文件内容末尾。

‘rb’:表示以二进制方式读取文件。该文件必须已存在。

‘w’:只写。打开即默认创建一个新文件,如果文件已存在,则覆盖写(即文件内原始数据会被新写入的数据清空覆盖)。

‘w+’:写读。打开创建新文件并写入数据,如果文件已存在,则覆盖写。

‘wb’:表示以二进制写方式打开,只能写文件, 如果文件不存在,创建该文件;如果文件已存在,则覆盖写。

‘a’:追加写。若打开的是已有文件则直接对已有文件操作,若打开文件不存在则创建新文件,只能执行写(追加在后面),不能读。

‘a+’:追加读写。打开文件方式与写入方式和'a'一样,但是可以读。需注意的是你若刚用‘a+’打开一个文件,一般不能直接读取,因为此时光标已经是文件末尾,除非你把光标移动到初始位置或任意非末尾的位置。(可使用seek() 方法解决这个问题,详细请见下文Model 8 示例)

看完上面各个模式的释义,可能有的人会觉得一堆文字有些枯燥,我一开始也是觉得如此,but,看似那么多模式,无非是三大类:读r(read),写w(write),追加a(append)。

当然,我会用尽可能精短的代码为大家解释,文件操作各个模式具体如何使用。请继续往下看。

二、demo

Model 1: r ---只读模式

注意:test2.txt 必须文件是已存在的。顺便说一下字符编码。因为Windows操作系统默认字符编码为GBK,而Python默认Unicode.utf-8,如果不写“ encoding=‘utf-8' "就会报错。

Model 2: r+ ---可读可写模式

Model 3: rb ---以二进制方式读取文件

Model 4: w ---只写模式

Model 5: w+ ---写读模式

Model 6: wb+ ---以二进制方式读写文件

Model 7: a ---追加写模式

Model 8: a+ ---追加读写模式

三、拓展

以下是文件操作中常用的一些方法:

print(f.readline()) # 打印一行

print(f.readline(5)) # 打印前5个字符

print(f.tell()) # 打印当前指针位置

print(f.read()) # 读完文件后,指针在最尾处

f.seek(0) # 如要重头到尾再读,文件指针须先回到文件头(0-文件头,默认值; 1-当前位置; 2-文件尾)

print(f.read()) # 重读文件

print(f.encoding) # 打印当前使用的字符编码

print(f.name) # 打印文件名

print(f.flush()) # 刷新

f.truncate() # 清空文件

f.truncate(12) # 从头开始,第12个字符后截断并清除

f.close() # 关闭文件

四、补充一个面试题:

题目:文本文件id-name.txt中以如下格式保存了学号和姓名信息,其中学号是唯一的,不会重复,学号的顺序无所谓。

123,yang

1234,dong

……

现在来了一名新生,学号为654321,姓名为王五,请用python代码添加把新学生添加进txt文件名单。

如果该学生已经存在,则用“王五”代替当前学号的姓名,学生人数不多,不用考虑代码的执行效率。

个人追加问题:如果考虑代码执行效率?该怎么设计?

附加本人半成品代码:没有考虑优化

#1. 读取文件内容

with open("./tihuan.txt", "r") as f:

f_r=f.read()

old_content= f_r.split("\n")

old_content2= [item.split(",") for item inold_content]#2. 获取新内容,将新内容切割得到id和date

new_content = input("请输入新内容:")

new_id= new_content.split(",")[0]

new_data= new_content.split(",")[1]#3.判断是否和文件中内容的ID重复,记录重复ID在old_content2的下表索引值 添加到列表中, 计算重复总数count

replace_index =[]

count=0for i inold_content2:if len(replace_index) <=len(old_content2):if new_id ==i[0]:

replace_index.append(count)

count+=1

#4. 根据记录的重复索引下表列表长度 判断是 执行替换还是 追加操作

if len(replace_index) ==0:print("没有重复内容,将新内容追加到文件末尾")

with open("./tihuan.txt", "a") as f_a:

f_a.write(new_content)

f_a.close()else:print("文件中有{}个相同内容".format(len(replace_index)))for i inreplace_index:

old_content2[i][1] =new_data#5. 新内容字符串拼接

str_data = ""

for i inold_content2:

str_data+= i[0] + "," + i[1] + "\n"

#6. 将新内容写入文件

with open("./tihuan.txt", "w") as f_w:

f_w.write(str_data)

f_w.close()

python文件读写r+_python文件读写操作(r/r+/rb/w/w+/wb/a/a+/ab)相关推荐

  1. python读取文件报错必须有一个正确的读写方式_python文件操作

    第一步 排除文件打开方式错误: r只读,r+读写,不创建 w新建只写,w+新建读写,二者都会将文件内容清零 (以w方式打开,不能读出.w+可读写) w+与r+区别: r+:可读可写,若文件不存在,报错 ...

  2. python open追加模式_Python文件操作,open读写文件,追加文本内容实例

    1.open使用open打开文件后一定要记得调用文件对象的close()方法.比如可以用try/finally语句来确保最后能关闭文件. file_object = open('thefile.txt ...

  3. python 文件读写 a+_python文件读写

    一.read. open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, o ...

  4. python读文件完整代码_python文件读写代码实例

    实验室导师又有任务,从一个.dat文件中读取波形数据,通过一个自编码网络进行异常检测.可是对我这种小白来说真的艰难.从最基础的文件读写开始吧. 先说数据,是一个int16型的数组.说是数组,但是读取也 ...

  5. python创建文件夹命令_python文件操作指令

    原文地址:http://www.cnblogs.com/rollenholt/archive/2012/04/23/2466179.html 常用的文件操作指令: python中对文件.文件夹(文件操 ...

  6. python操作文件和目录_python文件和目录操作方法

    一.python中对文件.文件夹操作时经常用到的os模块和shutil模块常用方法. 1.得到当前工作目录,即当前Python脚本工作的目录路径: os.getcwd() 2.返回指定目录下的所有文件 ...

  7. python文件输入符_python文件IO与file操作

    1 标准输入输出IO - (1) 打印到屏幕 print() print(self, *args, sep=' ', end='n', file=None): 把传递的表达式 转换成一个 字符串表达式 ...

  8. python中集合运算_Python—集合的操作、文件的操作

    1.集合的操作 1.集合的操作 定义: 1.不同元素组成,自动去重 2.无序 3.集合中的元素必须是不可变类型 1.集合的定义: 1>>> s1 = set('abcd') #同s1 ...

  9. python打开文件的句柄_python文件操作

    一.文件操作 打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作. 打开文件的模式有: r ,只读模式[默认模式,文件必须存在,不存在则抛出异 ...

最新文章

  1. windows下mysql启动脚本
  2. ruby安装插件报错
  3. CKMLCP前期未结算_报错
  4. NLP jieba分词源码解析
  5. vs中寄存器调试窗口可看出程序是多少位运行的及cpu寄存器使用情况
  6. 递归函数python有什么特点_Python中的递归
  7. C#中的函数参数能不能有默认值的解决方法
  8. 理解并行和并发的区别?
  9. [Leetcode][JAVA] Populating Next Right Pointers in Each Node II
  10. Minidwep-gtk字典 破 WPA
  11. 控制算法和编程算法_算法中的编程公平性
  12. 关于C语言中的int - float 计算的问题
  13. 2021-04-29 Do not nest ternary expressions
  14. 2020 dns排名_2020年最快的dns是多少_动漫台
  15. 2015年小米能否实现1亿部手机的销售目标?
  16. html追加没有样式,html中append追加的表格元素和静态显示的元素样式不同?
  17. APP测试之安全性测试
  18. html渐变颜色填充,在画布形状中填充渐变色
  19. 机器学习 决策树算法
  20. 大雪花U盘启动盘制作工具怎么样

热门文章

  1. 赠书:“替代Linux”?!全球技术海啸来临!
  2. 你应该使用Java8 非阻塞异步API来优化你的系统了
  3. 每日一皮:用户永远不知道怎么用我们的产品...
  4. 每日一皮:死循环的深刻理解...
  5. Apache Shiro 1.6.0 发布!修复绕过授权高危漏洞
  6. 这些好用的网站,看看你都收藏了没!
  7. cop2000计算机组成原理,COP2000计算机组成原理-南昌大学网络教学平台.doc
  8. 没有与制定类型匹配的重载函数 cv::Vec<_Tp 实例
  9. cuda nvcc dll
  10. python3生成avi文件