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")

执行结果如下:

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/30235.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

java-Object 底层实现

### 4. Object类的底层实现 #### 4.1 内存布局 在Java虚拟机中,每个对象都有一个头部(Header),包含对象的元数据和同步信息。对象头部包括两个主要部分: - **Mark Word**:用于存储对象的哈希码、GC年龄、…

[modern c++] 类型萃取 type_traits

前言&#xff1a; #include <type_traits> type_traits 又叫类型萃取&#xff0c;是一个在编译阶段用于进行 类型判断/类型变更 的库&#xff0c;在c11中引入。因为其工作阶段是在编译阶段&#xff0c;因此被大量应用在模板编程中&#xff0c;同时也可以结合 constexpr…

如何理解shell命令 cd $(dirname $0)

理解命令 cd $(dirname $0) 需要逐步拆解和分析每个部分的功能&#xff1a; $0&#xff1a; 在shell脚本中&#xff0c;$0 代表脚本的名称。这个变量包含了脚本的完整路径或相对路径。 dirname $0&#xff1a; dirname 是一个命令&#xff0c;用于去掉路径中的文件名部分&…

【CT】LeetCode手撕—141. 环形链表

目录 题目1- 思路2- 实现⭐141. 环形链表——题解思路 3- ACM实现 题目 原题连接&#xff1a;141. 环形链表 1- 思路 模式识别 模式1&#xff1a;判断链表的环 ——> 快慢指针 思路 快指针 ——> 走两步慢指针 ——> 走一步判断环&#xff1a;若快慢相遇则有环&a…

大模型推理优化技术概述

大模型推理优化技术概述 KVcache一句话总结&#xff1a;KV cache背景KV cache 计算过程PageAttention概述背景&#xff1a; MHD、MQA、GQA注意力机制MHAMQAGQA Flash Attention KVcache一句话总结&#xff1a; KV cache其实就是通过空间换取时间的方式&#xff0c;通过缓存Atte…

QTday5 2024-06-19

作业要求&#xff1a; 1.思维导图 2.整理代码&#xff1a;TCP服务器 作业1&#xff1a;思维导图 作业2&#xff1a;整理代码 运行代码&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTcpServer> #include <QList>…

信息安全技术基础知识-经典题目

【第1题】 1.在信息安全领域&#xff0c;基本的安全性原则包括机密性(Confidentiality)、完整性(Integrity)和 可用性(Availability)。机密性指保护信息在使用、传输和存储时 (1) 。信息加密是保证系统机密性的常用手段。使用哈希校验是保证数据完整性的常用方法。可用性指保证…

边学边赛拿冠军!北邮学子勇夺昇腾AI原生创新算子挑战赛金奖

导读 如何从零开始学习算子开发&#xff1f;昇腾AI原生创新算子挑战赛冠军“法宝”大揭秘。 “0xCCCCCCCC团队夺冠&#xff01;” 2024年5月9日&#xff0c;在首届昇腾AI原生创新算子挑战赛S1赛季决赛现场&#xff0c;来自北京邮电大学0xCCCCCCCC团队的孙明志和梁昊骞以总分第…

金蝶BI方案与奥威BI:智能、高效的数据分析组合

在当今数据驱动的时代&#xff0c;企业对于快速、准确、全面的数据分析需求日益增长。金蝶BI方案和奥威BI SaaS平台正是为满足这一需求而精心打造的智能数据分析工具。 方案见效快 金蝶BI方案以其高效的数据处理能力&#xff0c;能够快速地将海量数据转化为有价值的信息。通过…

uniapp 微信小程序自定义分享图片

场景&#xff1a;微信小程序用户&#xff0c;点击小程序里商品的分享按钮时&#xff0c;想要不同的商品展示不用的分享内容&#xff0c;比如分享图片上展示商品的图片、价格等信息。分享的UI图如下&#xff1a; 实现方法&#xff1a; 1. 分享按钮&#xff1a;<button open-…

Debian 时间同步处理

1.NTP授时的基本框架 时间同步在Debian环境使用NTP服务实现&#xff0c;在Debian平台&#xff0c;NTP是一个双向的协议——Debian&#xff0c;linux在设计时与git类似&#xff0c;有去中心化的考量。一些拥有固定IP的Debian设备&#xff0c;Debian鼓励这些用户加入NTP 服务池&…

Linux C++

1.Linux环境配置 1.安装C和C的编译器 yum -y install gcc* // centos72.升级编译器 升级软件包&#xff1a; yum -y install centos-release-scl devtoolset-8-gcc*启用软件包&#xff1a; echo "source /opt/rh/devtoolset-8/enable" >>/etc/profile # 每次…

计算机顶级会议和顶级期刊

顶级会议 国际计算机设计会议&#xff08;ICCD&#xff09;&#xff1a;由国际电气与电子工程师协会&#xff08;IEEE&#xff09;主办&#xff0c;是计算机体系结构领域的国际顶级会议之一&#xff0c;已经成功举办四十余届。 NeurIPS&#xff1a;全称神经信息处理系统大会&a…

电感(线圈)具有哪些基本特性

首先&#xff0c;电感&#xff08;线圈&#xff09;具有以下基本特性&#xff0c;称之为“电感的感性电抗” ?①直流基本上直接流过。 ?②对于交流&#xff0c;起到类似电阻的作用。 ?③频率越高越难通过。 下面是表示电感的频率和阻抗特性的示意图。 在理想电感器中&#…

centos7安装FTP服务器

目录 实验背景 一、配置yum源 1、本地yum 2、阿里云yum 二、安装vsftpd 1、安装vsftp服务 2、启动服务并设置开机自启动 3、开放防火墙和SELinux 三、创建用户和FTP目录 1、创建文件目录并配置权限 2、创建ftp组以及用户 四、修改vsftpd.conf文件 1、备份 vsftpd.c…

@Transactional注解可能会失效的情况有以下几种:

Transactional注解可能会失效的情况有以下几种&#xff1a; 在非public方法上使用&#xff1a;Spring的事务管理是基于代理的&#xff0c;如果在非public方法上使用Transactional注解&#xff0c;代理对象将无法拦截到该方法的调用&#xff0c;导致事务注解失效。 异常被捕获并…

C/C++ vector模拟实现

模拟实现&#xff1a; 框架 namespace yx {template<class T>class vector{public:typedef T* iterator;private:iterator _start;iterator _finish;iterator _end_of_storage;}; } 这里我们声明定义不分离 reverse() 新开一个空间&#xff0c;拷贝数据&#xff0c;然…

Mybatis相关知识

什么是Mybatis mybatis是JAVA领域中的一款持久化框架。它的主要功能是让我们轻松的在JAVA对象和数据库之间建立联系。通过这种联系&#xff0c;开发者可以很方便的存储、检索和操作数据。以下是Mybatis和其他ORM框架相比的一些特点&#xff1a; Mybatis强调对SQL的可控性&…

代码随想录训练营第十三天

第一题&#xff1a; 原题链接&#xff1a;144. 二叉树的前序遍历 - 力扣&#xff08;LeetCode&#xff09; 思路1&#xff1a;递归法 当传递下去的节点为空的时候&#xff0c;返回。 前序遍历的话顺序是根左右&#xff0c;因此一来变先将节点的值添加进res数组中&#xff0…

如何给mysql创建组合索引并分析索引命中(官方校正版)

MySQL 可以使用多列索引来执行测试索引中所有列的查询&#xff0c;或者仅测试第一列、前两列、前三列等的查询。如果您在索引定义中以正确的顺序指定列&#xff0c;则单个复合索引可以加速同一表上的几种查询。 MySQL 可以创建复合索引&#xff08;即在多个列上建立索引&#x…