第十章:文件与异常
10.1 读取文件常规方法:
with open('document\\.file.txt') as file_object: #windows中用斜杠(\),linux或UNIX中使用反斜杠(/)
concents = file_object.read()
print(concents.rstrip()) #去掉行尾的空格
注意:路径分为绝对路径和相对路径,windows系统中使用双斜杠(\\),书中所说的单斜杠(\)会报如下错误:
或者写成:
file_path = 'C:\\Users\\nees-pub\\document\\file.txt' #这里用的是绝对路径,依然要用双斜杠
with open(file_path) as first_file:
concents = first_file.read()
print(concents.rstrip())
10.1.2 逐行读取文件:for line in ...
file_path = 'document\\file.txt'
with open(file_path) as first_file:
for line in first_file:
print(line.rstrip())
10.1.3 把各行存储到列表,一行当做一个元素,在用for ... in ...读取列表打印显示
file_path = 'document\\file.txt'
with open(file_path) as first_file:
lines = first_file.readlines()
print(lines)
for line in lines:
print(line.rstrip())
10.2.1 写入文件
Python只能将字符串写入文本文件。要将数值数据存储到文本文件中,必须先使用函数str() 将其转换为字符串格式。
file_path = 'document\\file.txt'
with open(file_path,'w') as first_file:
first_file.write("I love you!")
'w'位三种写入模式中的一种,另外还有
'r':读取模式:只能读取文档,10.1读取文件的写法是省略了这个参数,也就是如果这个参数省略,则默认是r
'a':附加模式(追加模式,append),不清空文档,在行末添加写入
注意:w(写入模式)是覆盖写入,写入之前会把文件清空
例子:附加模式,file.txt位空文件
file_path = 'document\\file.txt'
with open(file_path,'a') as first_file:
first_file.write("I love you!\n")
with open(file_path) as file_project:
print(file_project.read())
第一次执行:
第二次执行:
第三次执行:
10.3.2 异常处理
try:
代码块
except 异常1:
异常1的解决办法
except 异常2:
异常2的解决办法
except Exception:
剩余的其他异常解决办法
注意:如果想要程序遇见异常依然继续执行,还保持沉默,就用 pass 代替 异常的解决方法
注意:如果异常1和异常2的解决方式一样,则可以写在一个except里,例子如下:
try:
代码块
except (异常1,异常2):
异常1和异常2共同的的解决办法
代码如下:如果已有json文件,但文件为空,则10.4.2 保存和读取用户生成的数据运行就会报如下错:
import json
# 如果以前存储了用户名,就加载它
# 否则,就提示用户输入用户名并存储它
filename = 'username.json'
try:
with open(filename) as f_read:
username = json.load(f_read)
except (ValueError,FileNotFoundError):
username = input("What's your name?")
with open(filename,'w') as f_write:
json.dump(username,f_write)
print("We'll remember you when you come back, " + username + "!")
else:
print("Welcome back, " + username + "!")
常见异常:
ZeroDivisionError :被除数不能为0
ValueError:值错误,比如输入值的类型错误
FileNotFoundError :未找到文件
10.4 json.dump()和json.load()
json.dump():把数据存储在json文件里
json.load():把数据文件加载到内存里
import json
number = [2,3,5,7,1,13]
filename = 'number.json'
with open(filename,'w') as f_obj:
json.dump(number,f_obj)
with open(filename) as f_c:
concents = json.load(f_c)
print(concents)
10.4.2 保存和读取用户生成的数据
import json
# 如果以前存储了用户名,就加载它
# 否则,就提示用户输入用户名并存储它
filename = 'username.json'
try:
with open(filename) as f_read:
username = json.load(f_read)
except FileNotFoundError:
username = input("What's your name?")
with open(filename,'w') as f_write:
json.dump(username,f_write)
print("We'll remember you when you come back, " + username + "!")
else:
print("Welcome back, " + username + "!")
10.4.3 文档字符串和注释的区别
文档字符串可以被程序读取打印,用 三引号“"” 包括起来
注释只起到解释说明的作用,前面是 # 做前缀(单行注释),或者用 三引号“"” 包括起来,如"""注释"""(多行注释)
读取文档字符串:
#定义一个带有文档字符串的简单函数
def print__hello():
"""this funtion is to print hello """
print("hello")
#下面我们来调用并输出文档字符串
print(print__hello.__doc__)
拓展:编码声明注释
# -*- coding:编码 -*-
或者
# coding=编码