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

这篇具有很好参考价值的文章主要介绍了关于“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

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

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


关于“Python”的核心知识点整理大全23,python,掌握Python分类专栏:开启智能数据处理之旅!,python,开发语言,数据库,笔记

第10 章

文件和异常

10.1 从文件中读取数据

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

10.1.1 读取整个文件

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

pi_digits.txt
3.1415926535
 8979323846
 2643383279

要动手尝试后续示例,可在编辑器中输入这些数据行,再将文件保存为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.1415926535
 8979323846
 2643383279

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

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

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

3.1415926535
 8979323846
 2643383279 

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.1415926535
 8979323846 
 2643383279

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

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

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

3.1415926535
 8979323846
 2643383279

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博客文章来源地址https://www.toymoban.com/news/detail-769762.html

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

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

到了这里,关于关于“Python”的核心知识点整理大全23的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

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

    目录 11.2.4 方法 setUp() 注意 11.3 小结 第二部分 项目1 外星人入侵 第12 章 武装飞船 注意 12.1 规划项目 12.2 安装 Pygame 注意 12.2.1 使用 pip 安装 Python 包 注意 如果你启动终端会话时使用的是命令python3,那么在这里应使用命令sudo python3 get-pip.py。 12.2.2 在 Linux 系统中安装 Pygame 往

    2024年02月04日
    浏览(27)
  • 关于“Python”的核心知识点整理大全63

    目录 20.2.11 使用 Git 跟踪项目文件 1. 安装Git 2. 配置Git 3. 忽略文件 .gitignore 注意 4. 提交项目 20.2.12 推送到 Heroku 注意 20.2.13 在 Heroku 上建立数据库 20.2.14 改进 Heroku 部署 1. 在Heroku上创建超级用户 注意 注意 如果你阅读完了第17章,就知道Git是一个版本控制程序,让你能够在每次

    2024年01月25日
    浏览(34)
  • 关于“Python”的核心知识点整理大全37

    目录 13.6.2 响应外星人和飞船碰撞 game_stats.py settings.py alien_invasion.py game_functions.py ship.py 注意 13.6.3 有外星人到达屏幕底端 game_functions.py 13.6.4 游戏结束 game_stats.py game_functions.py 13.7 确定应运行游戏的哪些部分 alien_invasion.py 13.8 小结 第14 章 记 分 14.1 添加 Play 按钮 game_stats.py 往

    2024年02月04日
    浏览(42)
  • 关于“Python”的核心知识点整理大全13

    目录 6.4.3 在字典中存储字典 6.5 小结 第7章 用户输入和while循环 7.1 函数 input()的工作原理 7.1.1 编写清晰的程序 7.1.2 使用 int()来获取数值输入 7.1.3 求模运算符 7.1.4 在 Python 2.7 中获取输入 7.2 while 循环简介 7.2.1 使用 while 循环 往期快速传送门👆(在文章最后): 6.4.3 在字典中

    2024年02月04日
    浏览(50)
  • 关于“Python”的核心知识点整理大全38

    由于Pygame没有内置创建按钮的方法,我们创建一个Button类,用于创建带标签的实心矩形。 你可以在游戏中使用这些代码来创建任何按钮。下面是Button类的第一部分,请将这个类保存为 文件button.py: button.py 首先,我们导入了模块pygame.font,它让Pygame能够将文本渲染到屏幕上。

    2024年02月03日
    浏览(61)
  • 关于“Python”的核心知识点整理大全48

    目录 world_population.py 16.2.5 制作世界地图 americas.py 16.2.6 在世界地图上呈现数字数据 na_populations.py 16.2.7 绘制完整的世界人口地图 world_population.py 16.2.8 根据人口数量将国家分组 world_population.py 16.2.9 使用 Pygal 设置世界地图的样式 world_population.py 往期快速传送门👆(在文章最后)

    2024年01月23日
    浏览(44)
  • 关于“Python”的核心知识点整理大全39

    目录 ​编辑 14.1.5 将 Play 按钮切换到非活动状态 game_functions.py 14.1.6 隐藏光标 game_functions.py game_functions.py 14.2 提高等级 14.2.1 修改速度设置 settings.py settings.py settings.py game_functions.py 14.2.2 重置速度 game_functions.py 14.3 记分 game_stats.py 14.3.1 显示得分 scoreboard.py scoreboard.py scoreboard.p

    2024年02月04日
    浏览(62)
  • 关于“Python”的核心知识点整理大全15

    目录 ​编辑 7.3.2 删除包含特定值的所有列表元素 pets.py 7.3.3 使用用户输入来填充字典 mountain_poll.py 7.4 小结 第8章 函 数 8.1 定义函数 greeter.py 8.1.1 向函数传递信息 8.1.2 实参和形参 8.2.1 位置实参 2. 位置实参的顺序很重要 8.2.2 实参 往期快速传送门👆(在文章最后):

    2024年02月05日
    浏览(40)
  • 关于“Python”的核心知识点整理大全43

    目录 ​编辑 15.2.3 使2散点图并设置其样式 scatter_squares.py 15.2.4 使用 scatter()绘制一系列点 scatter_squares.py 15.2.5 自动计算数据 scatter_squares.py 15.2.6 删除数据点的轮廓 15.2.7 自定义颜色 15.2.8 使用颜色映射 scatter_squares.py 注意 15.2.9 自动保存图表 15.3 随机漫步 15.3.1 创建 RandomWalk()类

    2024年02月04日
    浏览(32)
  • 关于“Python”的核心知识点整理大全18

    目录 ​编辑 8.5 传递任意数量的实参 pizza.py 8.5.1 结合使用位置实参和任意数量实参 8.5.2 使用任意数量的实参 user_profile.py 8.6 将函数存储在模块中 8.6.1 导入整个模块 pizza.py making_pizzas.py 8.6.2 导入特定的函数 8.6.3 使用 as 给函数指定别名 关于“Python”的核心知识点整理大

    2024年02月04日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包