当前位置: 首页 > news >正文

Python 基础:文件

目录

  • 一、从文件中读取数据
    • 1.1 读取整个文件
    • 1.2 逐行读取
  • 二、写入文件
    • 2.1 写入空文件
    • 2.2 写入多行
    • 2.3 附加到文件

遇到看不明白的地方,欢迎在评论中留言呐,一起讨论,一起进步!
在这里插入图片描述
本文参考:《Python编程:从入门到实践(第2版)》

一、从文件中读取数据

要使用文本文件中的信息,首先需要将信息读取到内存中。为此,我们可以一次性读取文件的全部内容,也可以以每次一行的方式逐步读取。

1.1 读取整个文件

首先我们准备一个文本文件 pi_digits.txt

在这里插入图片描述

下面打开并读取这个文件,再将其内容显示到屏幕上:

with open('pi_digits.txt') as file_object:contents = file_object.read()
print(contents)

“这个形式没见过呀 /(ㄒoㄒ)/~~”。别着急,我们逐个分解。

  • 函数 open()
    我们要记住,无论以任何方式使用文件,哪怕仅仅是打印其内容,都得先 打开文件,才能访问它!
    函数 open() 接受一个参数:要打开的文件的名称(如上面的 pi_digits.txt,文件路径的内容可以参考博客:一篇文章搞懂Python的文件路径操作)
    函数 open() 返回一个表示文件的对象,Python 将该对象赋给 as 之后的变量供以后使用(如上面的 file_object

  • 关键字 with
    我们要记住,打开了文件用过之后需要关闭!
    虽然 open() 和 open() 搭配使用也可以,但是并非在任何情况下都能轻松确定关闭文件的恰当时机。而关键字 with 让我们只管打开文件,并在需要时使用它,Python 自会在合适的时候自动将其关闭。

  • 文件对象.read()
    有了表示文件对象后,使用方法 read() 来读取这个文件的全部内容,并将其作为一个长长的字符串进行返回。(上面用 contents 来接受这个返回值,这样,通过打印 contents 的值,就可将这个文本文件的全部内容显示出来)
    在这里插入图片描述

1.2 逐行读取

要以每次一行的方式检查文件,可对文件对象使用 for 循环:

filename = 'pi_digits.txt'with open(filename) as file_object:for line in file_object:print(line.rstrip())

其中 rstrip() 来消除每一行每行末尾的换行符

在这里插入图片描述
使用关键字 with 时,open() 返回的文件对象只在 with 代码块内可用。 这就是为什么上面代码中要缩进。

如果非要在 with代码块外访问的话,可以先在 with 代码块内将文件的各行存储在一个列表中,并在 with 代码块外使用该列表。

下面的示例在 with 代码块中将文件 pi_digits.txt 的各行存储在一个列表中,再在 with 代码块外打印:

filename = 'pi_digits.txt'with open(filename) as file_object:lines = file_object.readlines()print(lines)
for line in lines:print(line.rstrip())

其中,readlines() 从文件中读取每一行,并将其存储在一个列表中。(注意和 1.1 中的 read() 区分)

二、写入文件

2.1 写入空文件

现在我们没有文件,执行下面这段代码:

filename = 'programming.txt'
with open(filename,'w') as file_object:file_object.write("I love programming.")

我们会发现目录中多了文件 programming.txt

在这里插入图片描述
我们在调用 open() 时需要提供两个实参,分别告诉 Python 要文件名写的动作 'w'

打开文件时,可指定读取模式('r')、写入模式('w')、附加模式('a')或读写模式('r+')。
如果省略了模式实参,Python 将以默认的只读模式打开文件。

如果要写入的文件不存在,函数 open() 将自动创建它。
然而,以写入模式('w')打开文件时千万要小心,因为如果指定的文件已经存在,Python 将在返回文件对象前清空该文件的内容。

注意:Python 只能将字符串写入文本文件。要将数值数据存储到文本文件中,必须先使用函数 str() 将其转换为字符串格式。

2.2 写入多行

我们执行下面这段代码:

filename = 'programming.txt'with open(filename,'w') as file_object:file_object.write("I love programming.")file_object.write("I love creating new games.")

运行结果为:

在这里插入图片描述
并没有按照我们所期望的进行分行,这是因为函数 write() 不会在写入的文本末尾添加换行符。

要让每个字符串都单独占一行,需要在方法调用 write() 中包含换行符'\n'):

filename = 'programming.txt'with open(filename,'w') as file_object:file_object.write("I love programming.\n")file_object.write("I love creating new games.\n")

这样执行结果为:

在这里插入图片描述

2.3 附加到文件

如果要给文件添加内容,而不是覆盖原有的内容,可以以附加模式('a')打开文件。以附加模式打开文件时。如果指定的文件不存在,Python 将创建一个空文件。

下面来修改代码,在既有文件 programming.txt 中再添加一些内容:

filename = 'programming.txt'with open(filename,'a') as file_object:file_object.write("I also love finding meaning in large datasets.\n")file_object.write("I love creating apps that can run in a browser.\n")

执行结果如下:

在这里插入图片描述
确实多了两行内容!
在这里插入图片描述

在这里插入图片描述

相关文章:

  • Adobe Premiere 视频编辑软件下载安装,pr 全系列资源分享!
  • 全网爆品!!【当当狸智能天文望远镜TW2】首发,超清智能大屏
  • 小米SU7遇冷,下一代全新车型被官方意外曝光
  • 【Golang】Go 中的生产者-消费者模式
  • 第二章_Windows用户管理_实验案例_配置服务器的用户级组账户
  • 极致深耕,打造核心竞争壁垒——探寻蓝思科技穿越周期的密码
  • 【Python高级编程】用 Matplotlib 绘制迷人的图表
  • 【技巧】Leetcode 137. 只出现一次的数字 II【中等】
  • 单元测试很难么?
  • 在线编程工具
  • matlab线性多部法求常微分方程数值解
  • 龙芯LS2K0300久久派上手体验
  • 详解 HBase 的安装部署及命令行操作
  • 2024前端面试准备5-React相关
  • C++ 网络套接字编程 tcp udp
  • 10个最佳ES6特性 ES7与ES8的特性
  • Angular Elements 及其运作原理
  • Bootstrap JS插件Alert源码分析
  • es6要点
  • k8s 面向应用开发者的基础命令
  • node-glob通配符
  • Object.assign方法不能实现深复制
  • Promise初体验
  • Python学习之路16-使用API
  • Sass 快速入门教程
  • Vue 动态创建 component
  • Vue--数据传输
  • 基于Android乐音识别(2)
  • 基于HAProxy的高性能缓存服务器nuster
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 可能是历史上最全的CC0版权可以免费商用的图片网站
  • 前端设计模式
  • 如何编写一个可升级的智能合约
  • 如何胜任知名企业的商业数据分析师?
  • 数组的操作
  • 微信支付JSAPI,实测!终极方案
  • FaaS 的简单实践
  • ​十个常见的 Python 脚本 (详细介绍 + 代码举例)
  • #DBA杂记1
  • (2015)JS ES6 必知的十个 特性
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (3)llvm ir转换过程
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (Java岗)秋招打卡!一本学历拿下美团、阿里、快手、米哈游offer
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (二)丶RabbitMQ的六大核心
  • (七)Activiti-modeler中文支持
  • (原創) 物件導向與老子思想 (OO)
  • (转)一些感悟
  • .Family_物联网
  • .gitignore文件忽略的内容不生效问题解决
  • .Net core 6.0 升8.0
  • .net core 实现redis分片_基于 Redis 的分布式任务调度框架 earth-frost
  • .NET Project Open Day(2011.11.13)
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...