学习处理文件和保存数据可让你的程序使用起来更容易,学习处理异常可帮助你应对文件不存在的情况,以及其他可能导致程序崩溃的问题。通过本章的学习可提高程序的适用性、可用性和稳定性。
一:从文件中读取文件:
1:读取整个文件:
① 首先创建一个文件pi_digits.txt
② 文件路径:
◆ 在Windows系统中,在文件路径中使用反斜杠(\) 而不是斜杠(/)
◆ 通过使用绝对路径,可读取系统任何位置的文件。
◆ 另外,由于反斜杠在Python中被视为转义字符,为确保万无一失,应以 原始字符串形式指定路径,即在开头的引号之前加上r。
③ 下面的程序打开并读取这个文件,再将其内容显示到屏幕上
◆ 关键字with在不需要访问文件的时候将文件关闭。
◆ 函数open()接受一个参数:要打开的文件的名称。
◆ 关键字as将文件“pi_digits.txt”重命名为 file_object,方便调用。
输出:
2:逐行读取:对文件对象使用for循环
输出:
要消除多余的空白行,可在print语句中使用rstrip():
输出:
3:创建一个包含文件各行内容的列表
输出:
4:使用文件的内容
输出:
二:写入文件
① 在如下示例中,调用open()函数时提供了两个实参:
一个实参是要打开的文件的名字(如果文件不存在,Python将自动创建它)
另一个是打开文件的模式,可指定只读模式("r"),写入模式("w"),附加模 式("a")等。
② Python只能将字符串写入文本文件,要将数值数据写入文本文件中,必须 先使用函数str()将其转换为字符串格式。
1:写入空文件
在当前工作目录下自动生成已写好的文件
打开文件programming.txt,将看到如下内容:
2:写入多行:函数write()不会在写入的文本末尾添加换行符,要让每个字符串独占一行,需要在write语句中包含换行符“\n”
输出:
3:附加到文件:以附加模式'a'打开文件,你写入到文件的行都将添加到文件末尾。如果文件不存在,Python将创建一个空文件。
输出:
三:异常
① 异常是使用try-except代码块处理的。
② 如果try代码块中的代码运行起来没有问题,Python将跳过except代码 块;
③ 如果try代码块中的代码导致了异常,Python将查找这样的except代码 块,并运行其中的代码
1:使用try-except代码块
输出:
2:else代码块:
通常将可能引发错误的代码放在try-except代码块中,可提高代码抵御错误能力依赖于try代码块成功执行的代码都应该放在else代码块中。
输出:
3:处理FileNotFoundError异常
输出:
4:分析文本:
◆ 分析Python之禅这首诗有多少个单词。
◆ 使用方法split(),它将根据一个字符串创建一个单词列表。
输出:
5:使用多个文件:
输出:
6:失败时一声不吭:
Python中有一个pass语句,可在代码块中使用它来让Python什么都不做。
输出:
四:存储数据
① 一种简单的方式是使用模块json来存储数据。
② 函数json.dump()接受两个对象:要存储的数据以及可用于存储数据的文 件对象。
1:使用json.dump()来存储数据:
输出:
2:使用json.load()来读取数据
输出:
3:保护和读取用户生成的数据
输出:
五:重构:
◆ 将代码划分为一系列完成具体工作的函数,这样的过程被称为重构。
◆ 重构让代码更清晰,更易于理解,更容易扩展。
# 重构上个问候用户的程序
import json
def get_stored_username():
"""如果存储了用户名,就获取它"""
filename = "username.json"
try:
with open(filename) as file_object:
username = json.load(file_object)
except FileNotFoundError:
return None
else:
return username
def get_new_username():
"""提示用户输入用户名"""
username = input("What is your name? ")
filename = "username.json"
with open(filename, "w") as file_object:
json.dump(username, file_object)
return username
def greet_user():
"""问候用户,并指出其名字"""
username = get_stored_username()
if username:
print("Welcome back, " + username + "!")
else:
username = get_new_username()
print("We'll remember you when you come back, " + username + "!")
greet_user()
输出:
每天学习一点点,每天进步一点点。