第十章 文件和异常
1. 从文件中读取数据
函数open()
with open('pi_digits.txt') as file_object:
contents = file_object.read()
print(contents.rstrip())
- 关键字with 在不再需要访问文件后将其关闭,所以可不使用close()函数。
- open()函数返回一个表示文件的对象,并存储在后面的变量中。
- 使用方法read() 读取文件的全部内容,并存储在变量中。
- read()在到达文件末尾时返回一个空字符串,所以使用方法 rstrip()删除
- 读取文本文件时,Python将其中的所有文本都解读为字符串。如果你读取的是数字,并要将其作为数值使用,就必须使用函数 int() 将其转换为整数,或使用函数float() 将其转换为浮点数。
文件路径
相对文件路径:让Python到指定的位置去查找,而该位置是相对于当前运行的程 序所在目录的。
绝对文件路径:文件在计算机中准确位置。
file_path = 'text_files/filename.txt' # Linux 或 MacOS 中的相对路径
file_path = 'text_files\filename.txt' # Windows 中的相对路径
file_path = '/home/ehmatthes/other_files/text_files/filename.txt' # Linux 或 MacOS 中的绝对路径
file_path = 'C:\Users\ehmatthes\other_files\text_files\filename.txt' # Windows 中的绝对路径
Linux 或MacOS系统中在文件路径中使用斜杠( / ),Windows系统在文件路径中使用反斜杠( \ )。
逐行读取
使用 for 循环逐行读取文件对象。
filename = 'pi_digits.txt'
with open(filename) as file_object:
for line in file_object:
print(line.rstrip()) # 每行行尾都有一个换行符,print也有一个换行符,所以打印出来会有一行空白行,使用rstrip消除多余空白行。
创建一个包含文件各行内容的列表
方法 readlines() 从文件中读取每一行,并将其存储在一个列表中。
with open(filename) as file_object:
lines = file_object.readlines()
2. 写入文件
写入空文件
filename = 'programming.txt'
with open(filename, 'w') as file_object:
file_object.write("I love programming") # 将这句话写入进filename文件中
调用open()函数时需要提供两个实参,第一个是要打开的文件的名称,第二个是打开文件的模式。
❗️如果要写入的文件不存在,函数open() 将自动创建它。然而,以写入(‘w’ )模式打开文件时千万要小心,因为如果指定的文件已经存在, Python将在返回文件对象前清空该文件。所以使用 x 或 a 模式比较保险。
3. 异常
- Python使用被称为异常的特殊对象来管理程序执行期间发生的错误。每当发生Python不知所措的错误时,它都会创建一个异常对象。如果你编写了处理该异常的代码,程序将继续运行;如果你未对异常进行处理,程序将停止,并显示一个 traceback,其中包含有关异常的报告。
- 异常是使用try-except 代码块处理的。(也可包含else 代码块)。
try-except-else 代码块的工作原理大致如下:Python尝试执行try 代码块中的代码;只有可能引发异常的代码才需要放在try 语句中。有时候,有一些仅在try 代码块成功执行时才需要运行的代码,这些代码应放在else 代码块中。
try:
answer = number1 / number2 # 两个数相除
except ZeroDivisionError: # ZeroDivisionError异常,除数为0
print("You can't divide by zero")
else:
print(answer) # 依赖于try 代码块成功执行的代码都应放到else 代码块中
- Python标准异常:链接