关于“Python”的核心知识点整理大全23

目录

​编辑

第10 章

文件和异常

10.1 从文件中读取数据

10.1.1 读取整个文件

pi_digits.txt

file_reader.py

10.1.2 文件路径

10.1.3 逐行读取

file_reader.py

10.1.4 创建一个包含文件各行内容的列表

10.1.5 使用文件的内容

pi_string.py

往期快速传送门👆(在文章最后):

感谢大家的支持!欢迎订阅收藏!专栏将持续更新!


第10 章

文件和异常

10.1 从文件中读取数据

文本文件可存储的数据量多得难以置信:天气数据、交通数据、社会经济数据、文学作品等。 每当需要分析或修改存储在文件中的信息时,读取文件都很有用,对数据分析应用程序来说尤其 如此。例如,你可以编写一个这样的程序:读取一个文本文件的内容,重新设置这些数据的格式 并将其写入文件,让浏览器能够显示这些内容。 要使用文本文件中的信息,首先需要将信息读取到内存中。为此,你可以一次性读取文件的 全部内容,也可以以每次一行的方式逐步读取。

10.1.1 读取整个文件

要读取文件,需要一个包含几行文本的文件。下面首先来创建一个文件,它包含精确到小数 点后30位的圆周率值,且在小数点后每10位处都换行:

pi_digits.txt
3.141592653589793238462643383279

要动手尝试后续示例,可在编辑器中输入这些数据行,再将文件保存为pi_digits.txt,也可从 本书的配套网站(https://www.nostarch.com/pythoncrashcourse/)下载该文件。然后,将该文件保 存到本章程序所在的目录中。 下面的程序打开并读取这个文件,再将其内容显示到屏幕上:

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

在这个程序中,第1行代码做了大量的工作。我们先来看看函数open()。要以任何方式使用 文件——哪怕仅仅是打印其内容,都得先打开文件,这样才能访问它。函数open()接受一个参数: 要打开的文件的名称。Python在当前执行的文件所在的目录中查找指定的文件。在这个示例中, 当前运行的是file_reader.py,因此Python在file_reader.py所在的目录中查找pi_digits.txt。函数open() 返回一个表示文件的对象。在这里,open('pi_digits.txt')返回一个表示文件pi_digits.txt的对 象;Python将这个对象存储在我们将在后面使用的变量中。

关键字with在不再需要访问文件后将其关闭。在这个程序中,注意到我们调用了open(),但 没有调用close();你也可以调用open()和close()来打开和关闭文件,但这样做时,如果程序存 在bug,导致close()语句未执行,文件将不会关闭。这看似微不足道,但未妥善地关闭文件可能 会导致数据丢失或受损。如果在程序中过早地调用close(),你会发现需要使用文件时它已关闭 (无法访问),这会导致更多的错误。并非在任何情况下都能轻松确定关闭文件的恰当时机,但通 过使用前面所示的结构,可让Python去确定:你只管打开文件,并在需要时使用它,Python自会 在合适的时候自动将其关闭。

有了表示pi_digits.txt的文件对象后,我们使用方法read()(前述程序的第2行)读取这个文 件的全部内容,并将其作为一个长长的字符串存储在变量contents中。这样,通过打印contents 的值,就可将这个文本文件的全部内容显示出来:

3.141592653589793238462643383279

相比于原始文件,该输出唯一不同的地方是末尾多了一个空行。为何会多出这个空行呢?因 为read()到达文件末尾时返回一个空字符串,而将这个空字符串显示出来时就是一个空行。要删 除多出来的空行,可在print语句中使用rstrip():

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

本书前面说过,Python方法rstrip()删除(剥除)字符串末尾的空白。现在,输出与原始文 件的内容完全相同:

3.141592653589793238462643383279 

10.1.2 文件路径

当你将类似pi_digits.txt这样的简单文件名传递给函数open()时,Python将在当前执行的文件 (即.py程序文件)所在的目录中查找文件。

根据你组织文件的方式,有时可能要打开不在程序文件所属目录中的文件。例如,你可能将 程序文件存储在了文件夹python_work中,而在文件夹python_work中,有一个名为text_files的文 件夹,用于存储程序文件操作的文本文件。虽然文件夹text_files包含在文件夹python_work中,但 仅向open()传递位于该文件夹中的文件的名称也不可行,因为Python只在文件夹python_work中查 找,而不会在其子文件夹text_files中查找。要让Python打开不与程序文件位于同一个目录中的文 件,需要提供文件路径,它让Python到系统的特定位置去查找。

由于文件夹text_files位于文件夹python_work中,因此可使用相对文件路径来打开该文件夹中 的文件。相对文件路径让Python到指定的位置去查找,而该位置是相对于当前运行的程序所在目 录的。在Linux和OS X中,你可以这样编写代码:

with open('text_files/filename.txt') as file_object:

这行代码让Python到文件夹python_work下的文件夹text_files中去查找指定的.txt文件。在 Windows系统中,在文件路径中使用反斜杠(\)而不是斜杠(/):

with open('text_files\filename.txt') as file_object: 

你还可以将文件在计算机中的准确位置告诉Python,这样就不用关心当前运行的程序存储在 什么地方了。这称为绝对文件路径。在相对路径行不通时,可使用绝对路径。例如,如果text_files 并不在文件夹python_work中,而在文件夹other_files中,则向open()传递路径'text_files/ filename.txt'行不通,因为Python只在文件夹python_work中查找该位置。为明确地指出你希望 Python到哪里去查找,你需要提供完整的路径。 绝对路径通常比相对路径更长,因此将其存储在一个变量中,再将该变量传递给open()会有 所帮助。在Linux和OS X中,绝对路径类似于下面这样:

file_path = '/home/ehmatthes/other_files/text_files/filename.txt'
with open(file_path) as file_object:

而在Windows系统中,它们类似于下面这样:

file_path = 'C:\Users\ehmatthes\other_files\text_files\filename.txt'
with open(file_path) as file_object: 

通过使用绝对路径,可读取系统任何地方的文件。就目前而言,最简单的做法是,要么将数 据文件存储在程序文件所在的目录,要么将其存储在程序文件所在目录下的一个文件夹(如 text_files)中。


注意 Windows系统有时能够正确地解读文件路径中的斜杠。如果你使用的是Windows系统,且 结果不符合预期,请确保在文件路径中使用的是反斜杠。


10.1.3 逐行读取

读取文件时,常常需要检查其中的每一行:你可能要在文件中查找特定的信息,或者要以 某种方式修改文件中的文本。例如,你可能要遍历一个包含天气数据的文件,并使用天气描述 中包含字样sunny的行。在新闻报道中,你可能会查找包含标签的行,并按特定的格 式设置它。 要以每次一行的方式检查文件,可对文件对象使用for循环:

file_reader.py
1 filename = 'pi_digits.txt'
2 with open(filename) as file_object:
3 for line in file_object:print(line) 

在1处,我们将要读取的文件的名称存储在变量filename中,这是使用文件时一种常见的做 法。由于变量filename表示的并非实际文件——它只是一个让Python知道到哪里去查找文件的字 符串,因此可轻松地将'pi_digits.txt'替换为你要使用的另一个文件的名称。调用open()后,将 一个表示文件及其内容的对象存储到了变量file_object中(见2)。这里也使用了关键字with, 让Python负责妥善地打开和关闭文件。为查看文件的内容,我们通过对文件对象执行循环来遍历 文件中的每一行(见3)。 我们打印每一行时,发现空白行更多了:

3.14159265358979323846 2643383279

为何会出现这些空白行呢?因为在这个文件中,每行的末尾都有一个看不见的换行符,而 print语句也会加上一个换行符,因此每行末尾都有两个换行符:一个来自文件,另一个来自print 语句。要消除这些多余的空白行,可在print语句中使用rstrip():

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

现在,输出又与文件内容完全相同了:

3.141592653589793238462643383279

10.1.4 创建一个包含文件各行内容的列表

使用关键字with时,open()返回的文件对象只在with代码块内可用。如果要在with代码块外 访问文件的内容,可在with代码块内将文件的各行存储在一个列表中,并在with代码块外使用该 列表:你可以立即处理文件的各个部分,也可推迟到程序后面再处理。

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

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

1处的方法readlines()从文件中读取每一行,并将其存储在一个列表中;接下来,该列表被 存储到变量lines中;在with代码块外,我们依然可以使用这个变量。在处,我们使用一个简单 的for循环来打印lines中的各行。由于列表lines的每个元素都对应于文件中的一行,因此输出 与文件内容完全一致。

10.1.5 使用文件的内容

将文件读取到内存中后,就可以以任何方式使用这些数据了。下面以简单的方式使用圆周率 的值。首先,我们将创建一个字符串,它包含文件中存储的所有数字,且没有任何空格:

pi_string.py
filename = 'pi_digits.txt'
with open(filename) as file_object:lines = file_object.readlines()
1 pi_string = ''
2 for line in lines:pi_string += line.rstrip()
3 print(pi_string)
print(len(pi_string)) 

就像前一个示例一样,我们首先打开文件,并将其中的所有行都存储在一个列表中。在1处, 我们创建了一个变量——pi_string,用于存储圆周率的值。接下来,我们使用一个循环将各行 都加入pi_string,并删除每行末尾的换行符(见2)。在3处,我们打印这个字符串及其长度:

3.1415926535 8979323846 2643383279
36

在变量pi_string存储的字符串中,包含原来位于每行左边的空格,为删除这些空格,可使 用strip()而不是rstrip():

filename = 'pi_30_digits.txt'
with open(filename) as file_object:lines = file_object.readlines()
pi_string = ''
for line in lines:pi_string += line.strip()
print(pi_string)
print(len(pi_string)) 

这样,我们就获得了一个这样的字符串:它包含精确到30位小数的圆周率值。这个字符串长 32字符,因为它还包含整数部分的3和小数点:

3.141592653589793238462643383279
32 

注意 读取文本文件时,Python将其中的所有文本都解读为字符串。如果你读取的是数字,并 要将其作为数值使用,就必须使用函数int()将其转换为整数,或使用函数float()将其转 换为浮点数


关于“Python”的核心知识点整理大全12-CSDN博客

往期快速传送门👆(在文章最后):

感谢大家的支持!欢迎订阅收藏!专栏将持续更新!

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

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

相关文章

Microsoft visual studio 2013卸载方法

1、问 题 Microsoft visual studio 2013 无法通过【程序与功能】卸载 2、解决方法 使用微软的Microsoft visual studio 2013 专用卸载工具 工具下载链接:https://github.com/Microsoft/VisualStudioUninstaller/releases 或 链接:https://pan.baidu.c…

【自动化测试】web3py 连接 goerli

web3py 连接 goerli 直接使用库里方法 if __name__ __main__:from web3.auto.infura.goerli import w3w3.eth.get_balance(get_address_by_private_key(os.getenv("AAA_KEY")))error info: websockets.exceptions.InvalidStatusCode: server rejected WebSocket …

02-MQ入门之RabbitMQ简单概念说明

二:RabbitMQ 介绍 1.RabbitMQ的概念 RabbitMQ 是一个消息中间件:它接受并转发消息。你可以把它当做一个快递站点,当你要发送一个包裹时,你把你的包裹放到快递站,快递员最终会把你的快递送到收件人那里,按…

LeetCode 1143最长公共子序列 1035不相交的线 53最大子序和 | 代码随想录25期训练营day53

动态规划算法11 LeetCode 1143 最长公共子序列 2023.12.16 题目链接代码随想录讲解[链接] int longestCommonSubsequence(string text1, string text2) {//1确定dp二维数组&#xff0c;dp[i][j]表示以text1[i-1]、text2[j-1]结尾相同的公共子序列的最大长度vector<vecto…

普通二叉树和右倾斜二叉树--LeetCode 111题《Minimum Depth of Binary Tree》

本文将以解释计算二叉树的最小深度的思路为例&#xff0c;致力于用简洁易懂的语言详细描述普通二叉树和右倾斜二叉树在计算最小深度时的区别。通过跟随作者了解右倾斜二叉树的概念以及其最小深度计算过程&#xff0c;读者也将对左倾斜二叉树有更深入的了解。这将为解决LeetCode…

BIM 技术:CIM (City Information Modeling) 1-7 级

本心、输入输出、结果 文章目录 BIM 技术&#xff1a;CIM &#xff08;City Information Modeling&#xff09; 1-7 级前言城市信息模型&#xff08;CIM&#xff09;概述城市信息模型分级介绍CIM 1CIM 2CIM 3CIM 4CIM 5CIM 6CIM 7 花有重开日&#xff0c;人无再少年实践是检验真…

【Linux】dump命令使用

dump命令 dump命令用于备份文件系统。使用dump命令可以检查ext2/3/4文件系统上的文件&#xff0c;并确定哪些文件需要备份。这些文件复制到指定的磁盘、磁带或其他存储介质保管。 语法 dump [选项] [目录|文件系统] bash: dump: 未找到命令... 安装dump yum -y install …

TableView复用机制的坑

TableView复用机制的坑 复用机制 UITableView 首先加载能够覆盖一屏幕的 UITableViewCell&#xff08;具体个数要根据每个 cell 的高度而定&#xff09;。 然后当我们往上滑动时&#xff08;往下滑动同理&#xff09;&#xff0c;需要一个新的 cell 放置在列表的下方。此时&…

SpringBoot Starter机制(自定义Start案例,实际开发场景中的短信模拟,AOP实现日志打印)

前言&#xff1a; 在我们上一篇博客中&#xff0c;实现Freemarke的增删改查&#xff0c;今天分享的是关于SpringBoot Starter机制-- 1.SpringBoot Starter 1.1.什么是SpringBoot Starter SpringBoot中的starter是一种非常重要的机制(自动化配置)&#xff0c;能够抛弃以前繁杂…

一款专业的磁盘坏道清除、彻底清除填充数据根据-硬盘数据彻底清除的方法分享

工具提供了硬盘坏道修复功能&#xff0c;你可以将损坏的磁盘放到软件分析&#xff0c;让软件找到错误的地方&#xff0c;让软件找到损坏的区域&#xff0c;通过内置的修复功能就可以将不能正常使用的部分恢复&#xff0c;从而让您的电脑磁盘可以保存很多数据&#xff0c;避免造…

Windows安装Tesseract OCR与Python中使用pytesseract进行文字识别

文章目录 前言一、下载并安装Tesseract OCR二、配置环境变量三、Python中安装使用pytesseract总结 前言 Tesseract OCR是一个开源OCR&#xff08;Optical Character Recognition&#xff09;引擎&#xff0c;用于从图像中提取文本。Pytesseract是Tesseract OCR的Python封装&am…

【python】Debian安装miniconda、spyder、tushare

1. miniconda 安装 — 动手学深度学习 2.0.0 documentation中有安装Miniconda的一些说明。 Miniconda — miniconda documentation是Miniconda网站&#xff0c;里面也有安装说明。 Debian安装按照linux安装即可&#xff1a; mkdir -p ~/miniconda3 wget https://repo.anaco…

macbookpro 2024怎么恢复出厂设置

可能你的MacBook曾经是高性能的代表&#xff0c;但是现在它正慢慢地逝去了自己的光芒&#xff1f;随着逐年的使用以及文件的添加和程序的安装&#xff0c;你的MacBook可能会开始变得迟缓卡顿&#xff0c;或者失却了以往的光彩。如果你发现你的Mac开始出现这些严重问题&#xff…

英语综合教程1第三版的一些题

unit1 unit2 unit3 unit4 unit5 unit6

3.1 内容管理模块 - 工程搭建、课程查询、配置Swagger、数据字典

文章目录 内容管理模块一、基础工程搭建1.1 需求分析1.2 业务流程1.3 数据模型1.4 创建模块工程1.4.1 介绍1.4.2 xuecheng-plus-content 聚合工程1.4.3 模块演示 二、课程查询准备2.1 需求分析2.1.1 业务流程2.1.2 数据模型 2.2 生成PO类2.2.1 新增Maven配置2.2.2 课程基本信息…

CSS的盒子模型(重点)

网页布局的三大核心&#xff1a;盒子模型、浮动、定位 网页布局的过程&#xff1a; 1. 先准备好相关的网页元素&#xff0c;网页元素基本都是盒子 Box 。 2. 利用 CSS 设置好盒子样式&#xff0c;然后摆放到相应位置。 3. 往盒子里面装内容.网页布局的核心本质&#xff1a; 就…

python+appium自动化常见操作

1、点击、输入操作 #点击 driver.find_element(id,com.lemon.lemonban:id/navigation_my).click() #输入 driver.find_element(id,com.lemon.lemonban:id/et_password).send_keys(abc)2、隐形等待 driver.implicitly_wait(10)3、显性等待 #显性等待 locator (xpath,xpath) wai…

技术分享 | Appium 用例录制

下载及安装 下载地址&#xff1a; github.com/appium/appi… 下载对应系统的 Appium 版本&#xff0c;安装完成之后&#xff0c;点击 “Start Server”&#xff0c;就启动了 Appium Server。 在启动成功页面点击右上角的放大镜&#xff0c;进入到创建 Session 页面。配置好 …

Python基础学习—Pandas数据分析实战剖析【文末送书-09】

文章目录 一.Pandas数据分析1.1 Pandas的主要应用包括&#xff1a;1.2 Pandas核心数据结构1.3 安装和导入Pandas 二.Pandas数据分析实战&#xff1a;用Python进行数据分析1. 数据集介绍2. 数据加载与初步观察3. 数据清洗4. 数据分析4.1 销售趋势分析4.2 热门商品分析 三.Pandas…

将开源免费进行到底,ThreadX开源电脑端GUIBuilder图形开发工具GUIX Studio

上个月微软刚刚宣布将ThreadX RTOS全家桶贡献给Eclipse基金会&#xff0c;免费供大家商用&#xff0c;宽松的MIT授权方式&#xff0c;就差这个GUIX Studio没有开源了&#xff0c;而且Windows还经常检索不到&#xff0c;并且也不提供离线包。 1、软件包有点大&#xff0c;700MB…