Python基础(五)
一、文件和异常
(一)从文件中读取数据
- 读取整个文件
1.txt
5201314
main.py
with open('1.txt') as file:
contents = file.read()
print(contents.rstrip()) # 删除读取时产生的空行,但实际测试时不会产生所谓空行
注:
- 关键字with在不再需要访问文件后将其关闭。我们调用了open(),但我们无需调用close(),让python决定何时关闭文档。
- 使用绝对路径时,对于windows而言使用反斜杠\,且一般通过变量传递。
- 逐行读取
with open('1.txt') as file:
for line in file:
print(line.strip())
- 创建一个包含文件各行内容的列表
with open('1.txt') as file:
lines = file.readlines() # 将文件分行存入列表lines
for line in lines:
print(line.strip())
(二)写入文件
- Python的所有读写模式:
- w:以写方式打开,吧
- a:以追加模式打开 (从 EOF 开始, 必要时创建新文件)
- r+:以读写模式打开
- w+:以读写模式打开 (参见 w )
- a+:以读写模式打开 (参见 a )
- rb:以二进制读模式打开
- wb:以二进制写模式打开 (参见 w )
- ab:以二进制追加模式打开 (参见 a )
- rb+:以二进制读写模式打开 (参见 r+ )
- wb+:以二进制读写模式打开 (参见 w+ )
- ab+:以二进制读写模式打开 (参见 a+ )
with open('1.txt', 'w') as file: # 以w模式打开,会将写入内容覆盖原内容
file.write("201314")
with open('1.txt', 'a') as file: # 以a模式打开,会将写入内容添加到末尾
file.write("201314")
注:如果要写入的文件不存在,open()会自动创建。
(三)异常
- 处理ZeroDivisionError异常
main.py
print(5 / 0)
Traceback (most recent call last):
File "main.py", line 1, in <module>
print(5/0)
ZeroDivisionError: division by zero
错误ZeroDivisionError是一个异常对象。Python无法按你要求做时,就会创建这种对象。
2. 使用try-except代码快
即告诉python如何处理异常,这样操作不会停止程序。
--snip--
try:
answer = int(first_number) / int(second_number)
except ZeroDivisionError:
print("0不能被当做除数")
else:
print(answer)
- 使用异常避免崩溃
程序崩溃可不太好,让用户看到错误报告也不是好主意,防止不懂技术的人搞糊涂、提高程序的安全性,我们一定要妥善处理好错误。 - 处理FileNotFoundError异常
当我们尝试读取一个不存在的文件:
with open("2.txt") as file:
contents = file.read()
报错信息如下:
Traceback (most recent call last):
File "main.py", line 1, in <module>
with open("2.txt") as file:
FileNotFoundError: [Errno 2] No such file or directory: '2.txt'
处理方式:
try:
with open("2.txt") as file:
contents = file.read()
except FileNotFoundError:
print("未找到文件")
- 分析文本
方法split()以空格为分隔符将字符串拆成部分,并存在列表中。
>>> title = "I love you!"
>>> title.splie()
['I', 'love', 'you!']
- 失败时一声不吭
try:
with open("2.txt") as file:
contents = file.read()
except FileNotFoundError:
pass # 使用pass,python将什么都不做
(四)存储数据
使用json可以将简单的python数据结构存储,并在python程序中共享数据,甚至与其他编程语言共享。
- 使用json.dump()和json.load()
使用json.dump()存储数据、使用json.load()读取数据
import json
numbers = [1, 2, 3, 4, 5]
with open('1.json', 'w') as file:
json.dump(numbers, file) # 将数据写入
with open('1.json', 'r') as file:
print(json.load(file)) # 读取数据