文件读写的流程

类比windows中手动操作txt文档,说明python中如何操作txt文件?

什么是文件的内存对象(文件句柄)?

演示怎么读取文件

  • ① 演示如下
f = open(r"D:\python_project\mxxl\test.txt", "r", encoding="utf-8")
data = f.read()
print(data[:245])
f.close()

结果如下:

  • ② 一个很奇怪的现象?
f = open(r"D:\python_project\mxxl\test.txt", "r", encoding="utf-8")
data = f.read()
data1 = f.read()
print(data[:245])
print("-------------------------------------")
print(data1[:245])
f.close()

结果如下:

问题:我们读取了2遍内容,为什么只显示了一次读取的结果呢?对于上述问题,我们用一张图回答上述问题。

演示怎么写文件

f = open(r"D:\python_project\mxxl\test2.txt","w",encoding="utf-8")
f.write("我爱北京天安门")
f.close()

假如我们在写一句天安门上太阳升,会出现啥情况呢?

f = open(r"D:\python_project\mxxl\test2.txt","w",encoding="utf-8")
f.write("天安门上太阳升")
f.write("很好,很好")
f.close()

意外发生:当我们再次写入新的内容的时候,发现之前写的内容不见了,这是为啥呢?这就是我们下面要讲述的文件读写的几种常见模式。

文件读写的几种常见模式(你不清楚的知识点)

关于r+、w+、a+使用说明(易错点)

r+模式:可读可写

对于这种模式,不管是读取文件中的内容,还是朝文件中写入内容。前提条件:文件存在。

# 只读取文件中的内容
f = open(r"D:\python_project\mxxl\test\test.txt", "r+", encoding="utf-8")
data = f.read()
print(data)
f.close() # 朝文件中写入内容后,立即读取,会出现啥问题?
f = open(r"D:\python_project\mxxl\test\test.txt", "r+", encoding="utf-8")
f.write("黑姑娘")
data = f.read()
print(data)
f.close() # 朝文件中写入内容后,调整句柄位置后,再读取,会出现啥问题?
f = open(r"D:\python_project\mxxl\test\test.txt", "r+", encoding="utf-8")
f.write("黑姑娘")
f.seek(0)
data = f.read()
print(data)
f.close()

结果如下:



w+:可读可写

# 直接往文件中写入内容
f = open(r"D:\python_project\mxxl\test\test.txt", "w+", encoding="utf-8")
f.write("bbbbbb")
f.close() # 直接读取上述文件,看看会发生啥问题?(特别注意这一步)
f = open(r"D:\python_project\mxxl\test\test.txt", "w+", encoding="utf-8")
data = f.read()
print(data)
f.close() # 朝文件中写入内容后,立即读取,又会发生什么?
f = open(r"D:\python_project\mxxl\test\test.txt", "w+", encoding="utf-8")
f.write("哈哈哈哈哈")
data = f.read()
print(data)
f.close() # 朝文件中写入内容后,调整句柄位置后,再读取,会发生什么?
f = open(r"D:\python_project\mxxl\test\test.txt", "w+", encoding="utf-8")
f.write("嘿嘿嘿嘿嘿")
f.seek(0)
data = f.read()
print(data)
f.close()

结果如下:



a+:可读可写

# 直接朝文件中写入内容
f = open(r"D:\python_project\mxxl\test\test.txt", "a+", encoding="utf-8")
f.write("哈哈")
f.close() # 直接读取文件中的内容
f = open(r"D:\python_project\mxxl\test\test.txt", "a+", encoding="utf-8")
data = f.read()
print(data)
f.close() # 调整句柄位置后,再读取文件中的内容
f = open(r"D:\python_project\mxxl\test\test.txt", "a+", encoding="utf-8")
f.seek(0)
data = f.read()
print(data)
f.close()

结果如下:



read、readline、readlines的区别

read()方法的使用说明

f = open(r"D:\python_project\mxxl\test\test.txt","r",encoding="utf-8")
data = f.read()
print(type(data))
print(data)
f.close()

结果如下:

readline()方法的使用说明

f = open(r"D:\python_project\mxxl\test\test.txt","r",encoding="utf-8")
data = f.readline()
print(type(data))
print(data)
f.close() f = open(r"D:\python_project\mxxl\test\test.txt","r",encoding="utf-8")
for i in range(3):
data = f.readline()
print(data)
f.close()

结果如下:

去掉每一行末尾的换行符:

f = open(r"D:\python_project\mxxl\test\test.txt","r",encoding="utf-8")
for i in range(3):
data = f.readline().strip()
print(data)
f.close()

结果如下:

readlines()方法的使用说明

f = open(r"G:\6Tipdm\file_read_write\test.txt","r",encoding="utf-8")
data = f.readlines()
print(type(data))
print(data)
f.close()

结果如下:

对于一个10G的大文件,怎么高效的查看文件中的内容呢?

相关说明

操作说明

f = open(r"D:\python_project\mxxl\test\test.txt","r",encoding="utf-8")
for line in f:
print(line.strip())

部分截图如下:



with语法

# with 语法 自动关闭文件 相当于帮你执行了fp.close()

with open(r'test.txt','r',encoding='utf-8') as f:
data = f.read()
print(data)

Python基础(十六):文件读写,靠这一篇就够了!的更多相关文章

  1. python基础知识六 文件的基本操作+菜中菜

    基础知识六 文件操作 ​ open():打开 ​ file:文件的位置(路径) ​ mode:操作文件模式 ​ encoding:文件编码方式 ​ f :文件句柄 f = open("1.t ...

  2. python基础操作_文件读写操作

    #文件读写# r只能读不能写,且文件必须存在,w只能写不能读,a只能写不能读# w+是写读模式,清空原文件内容# r+是读写模式,没有清空原文件内容,# 只要有r,文件必须存在,只要有w,都会清空原文 ...

  3. Python 爬虫十六式 - 第一式:HTTP协议

    HTTP:伟大而又无闻的协议 学习一时爽,一直学习一直爽!   Hello,大家好啊,我是Connor,一个从无到有的技术小白.有的人一说什么是HTTP协议就犯愁,写东西的时候也没想过什么是HTTP协 ...

  4. Python基础知识(六)------小数据池,集合,深浅拷贝

    Python基础知识(六)------小数据池,集合,深浅拷贝 一丶小数据池 什么是小数据池: ​ 小数据池就是python中一种提高效率的方式,固定数据类型使用同一个内存地址 代码块 : ​ 一个文 ...

  5. Python 爬虫十六式 - 第六式:JQuery的假兄弟-pyquery

    PyQuery:一个类似jquery的python库 学习一时爽,一直学习一直爽   Hello,大家好,我是 Connor,一个从无到有的技术小白.上一次我们说到了 BeautifulSoup 美味 ...

  6. Python 爬虫十六式 - 第七式:正则的艺术

    RE:用匹配来演绎编程的艺术 学习一时爽,一直学习一直爽   Hello,大家好,我是 Connor,一个从无到有的技术小白.上一次我们说到了 pyquery 今天我们将迎来我们数据匹配部分的最后一位 ...

  7. Python 爬虫十六式 - 第五式:BeautifulSoup-美味的汤

    BeautifulSoup 美味的汤 学习一时爽,一直学习一直爽!    Hello,大家好,我是Connor,一个从无到有的技术小白.上一次我们说到了 Xpath 的使用方法.Xpath 我觉得还是 ...

  8. Bootstrap<基础十六> 导航元素

    Bootstrap 提供的用于定义导航元素的一些选项.它们使用相同的标记和基类 .nav.Bootstrap 也提供了一个用于共享标记和状态的帮助器类.改变修饰的 class,可以在不同的样式间进行切 ...

  9. Python进阶(十六)----面向对象之~封装,多态,鸭子模型,super原理(单继承原理,多继承原理)

    Python进阶(十六)----面向对象之~封装,多态,鸭子模型,super原理(单继承原理,多继承原理) 一丶封装 , 多态 封装:            将一些东西封装到一个地方,你还可以取出来( ...

  10. Python爬虫十六式 - 第四式: 使用Xpath提取网页内容

    Xpath:简单易用的网页内容提取工具 学习一时爽,一直学习一直爽 !   Hello,大家好,我是Connor,一个从无到有的技术小白.上一次我们说到了 requests 的使用方法.到上节课为止, ...

随机推荐

  1. Node.js Debugger

    Node.js Debugger VS Code & Chrome DevTools https://nodejs.org/api/debugger.html https://nodejs.o ...

  2. nodejs 创建tcp/udp服务器和客户端

    TCP server // https://nodejs.org/api/net.html const net = require("net"); // https://nodej ...

  3. 如何在ASP.NET Core中编写高效的控制器

    ​通过遵循最佳实践,可以编写更好的控制器.所谓的"瘦"控制器(指代码更少.职责更少的控制器)更容易阅读和维护.而且,一旦你的控制器很瘦,可能就不需要对它们进行太多测试了.相反,你可 ...

  4. flatbuffer与protobuf对比

    在内存空间占用这个指标上,FlatBuffers占用的内存空间比protobuf多了两倍.序列化时二者的cpu计算时间FB比PB快了3000ms左右,反序列化时二者的cpu计算时间FB比PB快了900 ...

  5. [转]ROS 传感器消息及RVIZ可视化Laserscan和PointCloud

    https://blog.csdn.net/yangziluomu/article/details/79576508 https://answers.ros.org/question/60239/ho ...

  6. @media屏幕适应

    /** 屏幕特殊处理 我们用min-width时,小的放上面大的在下面,同理如果是用max-width那么就是大的在上面,小的在下面 **/ @media screen and (max-width: ...

  7. js中函数调用时,对参数个数和类型没有要求

    因为js是一种弱类型的编程语言,对数据类型的要求没有其他编程语言的要求严格,所以在定义函数的时候不需要像java一样对其传入参数的类型进行定,也对传入参数的个数没有要求. js函数的参数与大多数其他语 ...

  8. SpringCloud之服务配置

    1.config 1.1定义 对于分布式微服务,有很多的配置,那么修改起来很麻烦.这就需要对这些配置文件进行集中式的管理,config的功能就是用来统一管理配置文件的.它为微服务提供集中化的外部配置支 ...

  9. 1.3.1 apache的配置(下)

    (1)httpd.conf的配置 使用文本编辑工具(推荐使用Editplus.UltraEdit等工具),打开httpd.conf. 其中,行首为#的部分为注释部分,不会被apache服务器程序进行读 ...

  10. Oracle VM VirtualBox的下载和安装

    软件介绍 VirtualBox 是一款开源虚拟机软件,由德国 Innotek 公司开发,由Sun Microsystems公司出品的软件,使用Qt编写,在 Sun 被 Oracle 收购后正式更名成 ...