您的位置:首页 > 编程语言 > Python开发

【day 8】python编程:从入门到实践学习笔记-文件和异常(末附答案代码)

2018-03-20 09:35 1171 查看
学习笔记目录

【day 1】python编程:从入门到实践学习笔记-安装、变量和简单数据类型

【day 2】python编程:从入门到实践学习笔记-列表以及其操作

【day 3】python编程:从入门到实践学习笔记-if 语句(末附练习答案代码)

【day 4】python编程:从入门到实践学习笔记-字典(末附练习答案代码)

【day 5】python编程:从入门到实践学习笔记-用户输入和while循环(末附答案代码)

【day 6】python编程:从入门到实践学习笔记-函数(末附练习答案代码)

【day 7】python编程:从入门到实践学习笔记-类(末附练习答案代码)

【day 8】python编程:从入门到实践学习笔记-文件和异常(末附练习答案代码)

【day 9】python编程:从入门到实践学习笔记-测试代码(末附练习答案代码)

【day 10】python编程:从入门到实践学习笔记-Django入门(一)

【day 11】python编程:从入门到实践学习笔记-Django入门(二)

【day 12】python编程:从入门到实践学习笔记-Django入门(三)

【day 13】python编程:从入门到实践学习笔记-Django入门(四)

【day 14】python编程:从入门到实践学习笔记-用户账户(一)

【day 15】python编程:从入门到实践学习笔记-用户账户(二)

【day 16】python编程:从入门到实践学习笔记-用户账户(三)

【day 17
4000
】python编程:从入门到实践学习笔记-设计样式和部署(一)

【day 18】python编程:从入门到实践学习笔记-设计样式和部署(二)

第十章 文件和异常

从文件中读取数据

读取文件、文件路径

pi_digits.txt
3.1415926535
8979323846
2643383279

file_reader.py
fillename = 'pi_digits.txt'
#读取整个文件
with open(filename) as file_object:
contents = file_object.read()
print(contents.rstrip())

#逐行读取
with open(filename) as file_object:
for line in file_object:
print(line.rstrip())

运行结果:
3.1415926535
8979323846
2643383279
3.1415926535
8979323846
2643383279


函数
open()
:接受要打开文件的文件名作为参数。如果没有指定路径,则在当前执行的文件所在的目录中查找指定的文件。此函数返回一个表示文件的对象。

关键字
with
:表示在不需要访问文件之后将其关闭。

函数
read()
:用于从文件读取指定的字节数,如果未给定或为负则读取所有。到达文件末尾时返回一个空字符串(空行)。打印时可使用函数
rstrip()
删掉。

相对文件路径:相对于当前运行的程序所在目录。

绝对文件路径:完整的文件路径。

创建包含文件各行内容的列表并使用

使用关键字
with
时,
open()
返回的文件对象只在
with
代码块内使用。如果要在
with
代码块外访问文件内容,可在里边将文件各行存储在一个列表中待后续使用。

filename = 'pi_30_digits.txt'
with open(filename) as file_object:
lines = file_object.readlines()

pi_string = ''
for line in lines:
pi_string += line.strip()

print(pi_string)
print(len(pi_string))

运行结果:
3.141592653589793238462643383279
32


注意:读取文本文件时,python将其中所有文本都解读稳字符串。

写入文件

将文本写入文件时,调用open()时需要提供另外一个实参。其中,第一个实参时要打开的文件的名称。第二个实参是指定的模式:读取模式(
'r'
)、写入模式(
'w'
)、附加模式(
'a'
)、读取和写入模式(
'r+'
。如果省略将以默认的只读模式打开文件。

如果写入的文件不存在,则
open()
会自动创建它。如果以写入模式打开文件且指定文件对象存在,则返回文件对象前会清空改文件。

filename = 'programming.txt'
with open(filename, 'w') as file_object:
file_object.write("I love programming.")
file_object.write("I love programming.\n")
file_object.write("I love creating new games.\n")

运行结果:
programming.txt
I love programming.I love programming.
I love creating new games.


注意:python只能将字符串写入文本文件。函数
write()
不会在写入的文本末尾添加换行符。

附加到文件

如果要写入文件并不覆盖,可以使用附加模式。写入的行都会添加到文件末尾。指定文件不存在时,自动创建。

filename = 'programming.txt'
with open(filename, 'a') as file_object:
file_object.write("I also love finding meaning in large datasets.\n")
file_object.write("I love creating apps that can run in a browser.\n")

运行结果:
programming.txt
I love programming.I love programming.
I love creating new games.
I also love finding meaning in large datasets.
I love creating apps that can run in a browser.


异常

异常时python用来管理程序执行期间发生错误的特殊对象。

异常是使用
try-except
代码块
处理的。如果
try
代码块
中的代码运行无误,则跳过
except
代码块
;如果
try
代码块
中的代码运行出现错误,则运行
except
代码块


print(5/0)

运行结果:
Traceback (most recent call last):
File "division.py", line 1, in <module>
print(5/0)
ZeroDivisionError: division by zero


ZeroDivisionError
是一个异常对象。

try:
print(5/0)
except ZeroDivisionError:
print("You can't divide by zero!")

运行结果:
You can't divide by zero!


使用
try-except
代码块也可以隐藏Traceback,防止恶意攻击等等。

除了
try-except
代码块还有
try-except-else
代码块
。其中
try
代码块只包含可能导致错误的代码,而依赖于其成功执行的代码都放在
else
代码块
中。

如果希望发生错误时继续运行,可以在
except
代码块中使用
pass
语句
pass
语句还充当了占位符,用来提醒我们在程序的某个地方什么都没有做。

存储数据

模块json可以让我们将简单的python数据结构转储到文件中,并在程序再次运行时加载该文件中的数据。并且还可以使用json在python程序中分享数据。

函数
json.dump()
接受两个实参:要存储的数据以及可用于存储数据的文件对象。

import json
numbers = [2, 3, 5, 7, 11, 13]
filename = 'numbers.json'
with open(filename, 'w') as f_obj:
json.dump(numbers, f_obj)

运行结果:
numbers.json
[2, 3, 5, 7, 11, 13]


函数
json.load()
加载存储在指定文件对象的信息。

import json
filename = 'numbers.json'
with open(filename) as f_obj:
numbers = json.load(f_obj)
print(numbers)

运行结果:
[2, 3, 5, 7, 11, 13]


下面将存取数据和异常结合一下程序运行时,从文件获取用户名,若文件不存在,则提示输入用户名并存储:

import json
# 如果以前存储了用户名就加载它
# 否则提示用户输入用户名并存储它
filename = 'username.json'
try:
with open(filename) as f_obj:
username = json.load(f_obj)
except FileNotFoundError:
username = input("What is your name? ")
with open(filename, 'w') as f_obj:
json.dump(username, f_obj)
print("We'll remember you when you come back, " + username + "!")
else:
print("Welcome back, " + username + "!")

运行结果:
#如果文件不存在
What is your name? Eric
We'll remember you when you come back, Eric!

#如果文件存在
Welcome back, Eric!


第十章练习答案代码

链接:https://pan.baidu.com/s/1RrM9-f-w6PTKD43PhQ0nlg 密码:y1dr
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐