python从入门到实践读书笔记(六)
tag: python从零开始学习
种一棵树最好的时候,十年前或者今天!
第十章 文件和异常
增强程序的可用性、稳定性、健壮性。
从文件中读取数据
关键字with在不需要访问文件时关闭文件,也可以通过open()和close()方法来打开和关闭文件。但是一般不建议这么做。
with open('E://pi_digits.txt') as file_object:
contents = file_object.read()
print(contents)
或者写明模式
with open('E://pi_digits.txt','r') as file_object:
contents = file_object.read()
print(contents)
还可以使用切片打印其中一部分。
with open('E://pi_digits.txt') as file_object:
lines = file_object.read()
contents = ''
for line in lines:
contents += line.strip()
# 删除每一行左边和右边的空格
print(contents)
print(contents[:20])
print()
print(len(contents))
输出结果
3.141592653589793238462643383279
3.141592653589793238
可以使用文件名(在当前文件夹),相对路径(在当前文件夹下的文件夹中),绝对路径(在外部文件夹中)
逐行读取
print("---***分割线***----")
with open('E://pi_digits.txt') as file_object:
for line in file_object:
# line = file_object.read()
print(line.rstrip())
使用with关键字时,open()返回的文件对象只在with代码块内可用。如果要在在with代码块外部访问文件内容,可以在with代码块内将文件的各行存储在一个列表中。
readline()方法从文件中读取每一行。
写入数据到文件
filename = 'E://pi_happy.txt'
# 写入
with open(filename, 'w') as f:
f.write("I like c/C++ "+contents)
# 检查
with open(filename) as f1:
str = f1.read()
print(str.upper())
注:python只能将字符串写入文本文档,其他格式数据写入需要格式转换。
写入多行
write()函数不会在写入的文本末尾添加换行符。在写入多行时需要指定换行符。
添加到文件
附加文件。
打开文件时,指定实参‘a’
filename = 'E://pi_happy.txt'
# 附加
with open(filename, 'a') as f:
f.write("I like c/C++ \n")
f.write("becase 我想要高效率地分析处理数据.\n")
# 检查
with open(filename) as f1:
str = f1.read()
print(str.upper())
异常处理
python中用try-except
包围可能发生异常的代码块。
简单的异常处理
try:
print(5 / 0)
except ZeroDivisionError:
print("don't divide by zero!")
将依赖于try-except
代码块成功执行的代码放到else代码块中
,如:
else:
print("No answer!")
在发现异常时,一声不吭
如果想要让python发现异常后不作处理,
在except代码块中使用pass语句。
注:在pass语句之前的代码还是会被执行
存储数据
重点:json
json特点:轻便、有用、易于学习。
在用户关闭程序时,存储其提供的信息,常使用json文件。
json的优点:可以将简单的python数据结构存储到文件中,并在程序重新使用时加载其中的数据。还可以利用json在python程序或者其他语言程序之前分享数据。
import json
number = [2,23,45,67,8,90,23,44]
# 指定其存储的文件名以及文件格式(json)
filename = 'E://number.json'
# 使用json.dump()方法,将列表中数据存储到文件中
with open(filename, 'w') as f1:
json.dump(number, f1)
# 使用json.load()方法,加载文件中的数据
with open(filename) as f2:
numbers = json.load(f2)
print(numbers)
重构
目的:让代码更加清晰,更容易理解、更容易扩展维护。
后期代码越来越多时, 就需要对代码进行重构。
在最终版本中,每个函数都执行单一而清晰的任务。其返回值只有预先设计好的简单的几种