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

目录

​编辑

10.1.6 包含一百万位的大型文件

pi_string.py

10.1.7 圆周率值中包含你的生日吗

10.2 写入文件

10.2.1 写入空文件

write_message.py

programming.txt

10.2.2 写入多行

10.2.3 附加到文件

write_message.py

programming.txt

10.3 异常

10.3.1 处理 ZeroDivisionError 异常

division.py

10.3.2 使用 try-except 代码块

10.3.3 使用异常避免崩溃

division.py

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

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


10.1.6 包含一百万位的大型文件

前面我们分析的都是一个只有三行的文本文件,但这些代码示例也可处理大得多的文件。 如果我们有一个文本文件,其中包含精确到小数点后1 000 000位而不是30位的圆周率值,也可 创建一个包含所有这些数字的字符串。为此,我们无需对前面的程序做任何修改,只需将这个 文件传递给它即可。在这里,我们只打印到小数点后50位,以免终端为显示全部1 000 000位而 不断地翻滚:

pi_string.py
filename = 'pi_million_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[:52] + "...")
print(len(pi_string)) 

输出表明,我们创建的字符串确实包含精确到小数点后1 000 000位的圆周率值:

3.14159265358979323846264338327950288419716939937510...
1000002

对于你可处理的数据量,Python没有任何限制;只要系统的内存足够多,你想处理多少数据 都可以。


注意 要运行这个程序(以及后面的众多示例),你需要从https://www.nostarch.com/pythoncrashcourse/下载相关的资源。


10.1.7 圆周率值中包含你的生日吗

我一直想知道自己的生日是否包含在圆周率值中。下面来扩展刚才编写的程序,以确定某个 人的生日是否包含在圆周率值的前1 000 000位中。为此,可将生日表示为一个由数字组成的字符 串,再检查这个字符串是否包含在pi_string中:

filename = 'pi_million_digits.txt'
with open(filename) as file_object:lines = file_object.readlines()
pi_string = ''
for line in lines:pi_string += line.rstrip()
1 birthday = input("Enter your birthday, in the form mmddyy: ")1
2 if birthday in pi_string:print("Your birthday appears in the first million digits of pi!")
else:print("Your birthday does not appear in the first million digits of pi.")

在1处,我们提示用户输入其生日,在接下来的2处,我们检查这个字符串是否包含在 pi_string中。运行一下这个程序:

Enter your birthdate, in the form mmddyy: 120372
Your birthday appears in the first million digits of pi! 

我的生日确实出现在了圆周率值中!读取文件的内容后,就可以以你能想到的任何方式对其 进行分析。

10.2 写入文件

保存数据的最简单的方式之一是将其写入到文件中。通过将输出写入文件,即便关闭包含程 序输出的终端窗口,这些输出也依然存在:你可以在程序结束运行后查看这些输出,可与别人分 享输出文件,还可编写程序来将这些输出读取到内存中并进行处理。

10.2.1 写入空文件

要将文本写入文件,你在调用open()时需要提供另一个实参,告诉Python你要写入打开的文 件。为明白其中的工作原理,我们来将一条简单的消息存储到文件中,而不是将其打印到屏幕上:

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

在这个示例中,调用open()时提供了两个实参(见1)。第一个实参也是要打开的文件的名称; 第二个实参('w')告诉Python,我们要以写入模式打开这个文件。打开文件时,可指定读取模 式('r')、写入模式('w')、附加模式('a')或让你能够读取和写入文件的模式('r+')。如果 你省略了模式实参,Python将以默认的只读模式打开文件。 如果你要写入的文件不存在,函数open()将自动创建它。然而,以写入('w')模式打开文 件时千万要小心,因为如果指定的文件已经存在,Python将在返回文件对象前清空该文件。

在2处,我们使用文件对象的方法write()将一个字符串写入文件。这个程序没有终端输出, 但如果你打开文件programming.txt,将看到其中包含如下一行内容:

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

I love programming. 

相比于你的计算机中的其他文件,这个文件没有什么不同。你可以打开它、在其中输入新文 本、复制其内容、将内容粘贴到其中等。


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


10.2.2 写入多行

函数write()不会在你写入的文本末尾添加换行符,因此如果你写入多行时没有指定换行符, 文件看起来可能不是你希望的那样:

如果你打开programming.txt,将发现两行内容挤在一起:

I love programming.I love creating new games. 

要让每个字符串都单独占一行,需要在write()语句中包含换行符:

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

现在,输出出现在不同行中:

I love programming.
I love creating new games. 

像显示到终端的输出一样,还可以使用空格、制表符和空行来设置这些输出的格式。

10.2.3 附加到文件

如果你要给文件添加内容,而不是覆盖原有的内容,可以附加模式打开文件。你以附加模式 打开文件时,Python不会在返回文件对象前清空文件,而你写入到文件的行都将添加到文件末尾。 如果指定的文件不存在,Python将为你创建一个空文件。 下面来修改write_message.py,在既有文件programming.txt中再添加一些你酷爱编程的原因:

write_message.py
filename = 'programming.txt'
1 with open(filename, 'a') as file_object:
2 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")

在1处,我们打开文件时指定了实参'a',以便将内容附加到文件末尾,而不是覆盖文件原 来的内容。在2处,我们又写入了两行,它们被添加到文件programming.txt末尾:

programming.txt
I love programming.
I love creating new games.
I also love finding meaning in large datasets.
I love creating apps that can run in a browser.

最终的结果是,文件原来的内容还在,它们后面是我们刚添加的内容。

10.3 异常

Python使用被称为异常的特殊对象来管理程序执行期间发生的错误。每当发生让Python不知 所措的错误时,它都会创建一个异常对象。如果你编写了处理该异常的代码,程序将继续运行; 如果你未对异常进行处理,程序将停止,并显示一个traceback,其中包含有关异常的报告。

异常是使用try-except代码块处理的。try-except代码块让Python执行指定的操作,同时告 诉Python发生异常时怎么办。使用了try-except代码块时,即便出现异常,程序也将继续运行: 显示你编写的友好的错误消息,而不是令用户迷惑的traceback。

10.3.1 处理 ZeroDivisionError 异常

下面来看一种导致Python引发异常的简单错误。你可能知道不能将一个数字除以0,但我们 还是让Python这样做吧:

division.py
print(5/0)

显然,Python无法这样做,因此你将看到一个traceback:

Traceback (most recent call last):File "division.py", line 1, in <module>print(5/0)
1 ZeroDivisionError: division by zero

在上述traceback中,1处指出的错误ZeroDivisionError是一个异常对象。Python无法按你的 要求做时,就会创建这种对象。在这种情况下,Python将停止运行程序,并指出引发了哪种异常, 而我们可根据这些信息对程序进行修改。下面我们将告诉Python,发生这种错误时怎么办;这样, 如果再次发生这样的错误,我们就有备无患了。

10.3.2 使用 try-except 代码块

当你认为可能发生了错误时,可编写一个try-except代码块来处理可能引发的异常。你让 Python尝试运行一些代码,并告诉它如果这些代码引发了指定的异常,该怎么办。 处理ZeroDivisionError异常的try-except代码块类似于下面这样:

try:print(5/0)
except ZeroDivisionError:print("You can't divide by zero!") 

我们将导致错误的代码行print(5/0)放在了一个try代码块中。如果try代码块中的代码运行 起来没有问题,Python将跳过except代码块;如果try代码块中的代码导致了错误,Python将查找 这样的except代码块,并运行其中的代码,即其中指定的错误与引发的错误相同。 在这个示例中,try代码块中的代码引发了ZeroDivisionError异常,因此Python指出了该如 何解决问题的except代码块,并运行其中的代码。这样,用户看到的是一条友好的错误消息,而 不是traceback:

You can't divide by zero!

如果try-except代码块后面还有其他代码,程序将接着运行,因为已经告诉了Python如何处 理这种错误。下面来看一个捕获错误后程序将继续运行的示例。

10.3.3 使用异常避免崩溃

发生错误时,如果程序还有工作没有完成,妥善地处理错误就尤其重要。这种情况经常会出 现在要求用户提供输入的程序中;如果程序能够妥善地处理无效输入,就能再提示用户提供有效 输入,而不至于崩溃。 下面来创建一个只执行除法运算的简单计算器:

division.py
print("Give me two numbers, and I'll divide them.")
print("Enter 'q' to quit.")
while True:
1 first_number = input("\nFirst number: ")
if first_number == 'q':break
2 second_number = input("Second number: ")
if second_number == 'q':break
3 answer = int(first_number) / int(second_number)print(answer) 

在1处,这个程序提示用户输入一个数字,并将其存储到变量first_number中;如果用户输 入的不是表示退出的q,就再提示用户输入一个数字,并将其存储到变量second_number中(见2)。 接下来,我们计算这两个数字的商(即answer,见3)。这个程序没有采取任何处理错误的措施, 因此让它执行除数为0的除法运算时,它将崩溃:

Give me two numbers, and I'll divide them.
Enter 'q' to quit.
First number: 5
Second number: 0
Traceback (most recent call last):File "division.py", line 9, in <module>answer = int(first_number) / int(second_number)
ZeroDivisionError: division by zero 

程序崩溃可不好,但让用户看到traceback也不是好主意。不懂技术的用户会被它们搞糊涂, 而且如果用户怀有恶意,他会通过traceback获悉你不希望他知道的信息。例如,他将知道你的程 序文件的名称,还将看到部分不能正确运行的代码。有时候,训练有素的攻击者可根据这些信息 判断出可对你的代码发起什么样的攻击。


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

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

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

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

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

相关文章

轻量封装WebGPU渲染系统示例<51>- 视差贴图(Parallax Map)(源码)

视差纹理是一种片段着色阶段增强材质表面凹凸细节的技术。 当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/material/src/voxgpu/sample/ParallaxTexTest.ts 当前示例运行效果: 此示例基于此渲染系统实现&#xff0c;当前示例TypeScript源码如…

自动驾驶学习笔记(二十)——Planning算法

#Apollo开发者# 学习课程的传送门如下&#xff0c;当您也准备学习自动驾驶时&#xff0c;可以和我一同前往&#xff1a; 《自动驾驶新人之旅》免费课程—> 传送门 《Apollo 社区开发者圆桌会》免费报名—>传送门 文章目录 前言 参考线平滑 双层状态机 EM Planner …

2023年OceanBase开发者大会-核心PPT资料下载

一、峰会简介 2023年OceanBase开发者大会主要涵盖了OceanBase的最新技术进展、产品更新以及开发者工具的发布。大会发布了OceanBase 4.1版本&#xff0c;公布了两大友好工具&#xff0c;升级了文档的易用性&#xff0c;并统一了企业版和社区版的代码分支。这些举措全面呈现了O…

数据结构-猴子吃桃问题

一、需求分析 有一群猴子摘了一堆桃子&#xff0c;他们每天都吃当前桃子的一半且再多吃一个&#xff0c;到了第10天就只余下一个桃子。用多种方法实现求出原来这群猴子共摘了多少个桃子。要求&#xff1a; 1)采用数组数据结构实现上述求解&#xff1b; 2)采用链数据结构实现上述…

java --- 异常

目录 一、异常体系介绍 二、异常的作用 三、异常处理方式 3.1 捕获异常 2.1 灵魂一问&#xff1a; 如果try中没有遇到问题&#xff0c;如何执行&#xff1f; 2.2 灵魂二问&#xff1a;如果try中可能会遇到多个问题&#xff0c;怎么执行&#xff1f; 2.3 灵魂三问&#x…

08 v-text指令

概述 v-text指令主要是用来渲染文本内容&#xff0c;和双大括号的效果基本一致&#xff0c;所以使用场景非常少。 一般情况下&#xff0c;我们都会使用双大括号语法去渲染文本内容&#xff0c;而不是使用v-text指令。 基本用法 我们创建src/components/Demo08.vue&#xff…

RocketMQ源码 Broker-PullRequestHoldService 长轮询消息拉取组件源码分析

前言 PullRequestHoldService 继承了ServiceThread类&#xff0c;它本身是一个线程&#xff0c;以后台方式无线循环运行&#xff0c;支持长轮询&#xff08;默认5秒&#xff09;和短轮询&#xff08;默认1秒&#xff09;两种方式&#xff08;CountDownlatch 方式控制&#xff…

安卓端出现https请求失败(转)

背景# 某天早上&#xff0c;正在一个会议时&#xff0c;突然好几个同事被叫出去了&#xff1b;后面才知道&#xff0c;是有业务同事反馈到领导那里&#xff0c;我们app里面某个功能异常。 具体是这样&#xff0c;我们安卓版本的app是禁止截屏的&#xff08;应该是app里做了拦…

Oracle-应用会话集中在RAC集群一个节点问题

问题&#xff1a; 用户一套Oracle19c RAC集群&#xff0c;出现一个奇怪的现象&#xff0c;通过SCAN IP访问的连接会话都集中在节点一实例&#xff0c;而且用户并没有做任何的节点服务访问去控制会话的连接节点&#xff0c;比如常见的通过集群的高可用服务去控制应用访问连接集中…

【BIG_FG_CSDN】*VMware17pro*Linux*Redhit6网络管理(个人向——学习笔记)

物理机中的网络 查看物理网络的方法 “网络连接”—>单点选中网络的选项-->菜单栏中“查看此连接状态”-->“详细信息” “网络连接”中的VM网卡 在主机上对应的有VMware Network Adapter VMnet1和VMware Network Adapter VMnet8两块虚拟网卡&#xff0c;它们分别…

【SpringMVC】SpringMVC简介、过程分析、bean的加载和控制

文章目录 1. SpringMVC简介2. SpringMVC入门案例文件结构第一步&#xff1a;坐标导入第二步&#xff1a;创建SpringMVC容器的控制器类第三步&#xff1a;初始化SpringMVC环境&#xff0c;设定Spring加载对应的bean第四步&#xff1a;初始化Servlet容器&#xff0c;加载SpringMV…

【数据结构】(堆)Top-k|堆排序

目录 概念&#xff1a; 堆的实现 构建 初始化 销毁 插入元素 往上调整 删除堆顶元素 往下调整 返回堆顶元素 返回有效个数 是否为空 堆排序 Top-k问题 ​编辑 创建数据 堆top-k 概念&#xff1a; 堆是将数据按照完全二叉树存储方式存储到一维数组中&#xff…