1 读取文件中的数据
1.1 读取整个文件
示例:
注意:绝对路径和相对路径
相对路径:相对于当前运行程序所在的目录
绝对路径:文件在计算机中的路径
在Windows系统中,在文件路径中使用反斜杠(\ )而不是斜杠(/ )
1.2 逐行读取
1.3 创建一个包含文件各行内容的列表
使用关键字with 时,open() 返回的文件对象只在with 代码块内可用。如果要在with 代码块外访问文件的内容,可在with 代码块内将文件的各行存储在一个列表中,并在with 代码块外使用该列表:你可以立即处理文件的各个部分,也可推迟到程序后面再处理。
1.4 使用文件的内容
示例:
注意:读取文本文件时,Python将其中的所有文本都解读为字符串。如果你读取的是数字,并要将其作为数值使用,就必须使用函数int() 将其转换为整数,或使用函数float() 将其转换为浮点数。
2 写入文件
保存数据的最简单的方式之一是将其写入到文件中。
2.1 写入空文件
示例:
调用open() 时提供了两个实参。第一个实参也是要打开的文件的名称;第二个实参(‘w’ )告诉Python,我们要以
写入模式打开这个文件。打开文件时,可指定读取模式 ('r' )、写入模式 ('w' )、附加模式 ('a' )或让你能够读取和写入文件的模式('r+' )。如果你省略了模式实参,Python将以默认的只读模式打开文件。
如果你要写入的文件不存在,函数open() 将自动创建它。然而,以写入(‘w’ )模式打开文件时千万要小心,因为如果指定的文件已经存在,Python将在返回文件对象前清空该文件。
注意:Python只能将字符串写入文本文件。要将数值数据存储到文本文件中,必须先使用函数str() 将其转换为字符串格式。
2.2 写入多行
函数write() 不会在你写入的文本末尾添加换行符,因此如果你写入多行需指定换行符。
示例:
2.3 附加到文件
如果你要给文件添加内容,而不是覆盖原有的内容,可以
附加模式打开文件。你以附加模式打开文件时,Python不会在返回文件对象前清空文件,而你写入到文件的行都将添加到文件末尾。如果指定的文件不存在,Python将为你创建一个空文件。
3 异常
Python使用被称为
异常的特殊对象来管理程序执行期间发生的错误。每当发生让Python不知所措的错误时,它都会创建一个异常对象。如果你编写了处理该异常的代码,程序将继续运行;如果你未对异常进行处理,程序将停止,并显示一个traceback,其中包含有关异常的报告。
异常是使用try-except 代码块处理的。try-except 代码块让Python执行指定的操作,同时告诉Python发生异常时怎么办。使用了try-except 代码块时,即便出现异常,程序也将继续运行:显示你编写的友好的错误消息,而不是令用户迷惑的traceback。
3.1 ZeroDivisionError 异常及处理
示例:
ZeroDivisionError是一个异常对象。Python无法按你的要求做时,就会创建这种对象。在这种情况下,Python将停止运行程序,并指出引发了哪种异常,而我们可根据这些信息对程序进行修改。
如果try 代码块中的代码运行起来没有问题,Python将跳过except 代码块;如果try 代码块中的代码导致了错误,Python将查找这样的except 代码块,并运行其中的代码,即其中指定的错误与引发的错误相同。
示例:
try-except-else 代码块的工作原理大致如下:Python尝试执行try 代码块中的代码;只有可能引发异常的代码才需要放在try 语句中。有时候,有一些仅在try 代码块成功执行时才需要运行的代码;这些代码应放在else 代码块中。except 代码块告诉Python,如果它尝试运行try 代码块中的代码时引发了指定的异常,该怎么办。
3.2 FileNotFoundError 异常及处理
示例:
3.3 分析文本
方法split() 以空格为分隔符将字符串分拆成多个部分,并将这些部分都存储到一个列表中。
示例:示例:
对异常不需要做任何处理时,可在except代码块中使用pass语句。
4 存储数据
很多程序都要求用户输入某种信息,,程序都把用户提供的信息存储在列表和字典等
数据结构中。用户关闭程序时,你几乎总是要保存他们提供的信息;一种简单的方式是使用模块json 来存储数据。
模块json 让你能够将简单的
Python数据结构转储到文件中,并在程序再次运行时加载该文件中的数据。
4.1 json.dump() 和json.load()
示例:
4.2 保存和读取用户生成的数据
示例:合二为一:
5 重构
你经常会遇到这样的情况:代码能够正确地运行,但可做进一步的改进——将代码划分为一系列完成具体工作的函数。这样的过程被称为重构 。重构让代码更清晰、更易于理解、更容易扩展。每个函数都执行单一而清晰的任务。