Python从入门到实践
第十章 文件和异常
目录
1.从文件中读取数据
1.1 读取整个文件
open()函数读取文件内容并输出,其返回的是一个对象
with open('pi_digits.txt') as file_object :
contents = file_object.read()
print(contents)
# OUTPUT
3.1415926535
8979323846
2643383279
使用关键字with时open()返回的文件对象只能在with代码块内使用
1.2 文件路径
相对文件路径,在Linux和OS X系统中可以使用:
with open('PyProject/pi_digits.txt') as file_object :
而Windows可以使用反斜杠而不是斜杠
with open('PyProject\pi_digits.txt') as file_object :
而绝对路径会更长,以盘符名称开头
1.3 逐行读取
要以每次一行的方式检查文件,可以对文件对象采用For循环:
filename = 'pi_digits.txt'
with open(filename) as file_object :
for line in file_object:
print(line.rstrip())
# OUTPUT
3.1415926535
8979323846
2643383279
1.4 在with代码块外进行操作(利用列表)
在使用with关键字时,open()返回的文件对象只在with代码块内可用,如果要在with代码块
外访问文件内容,可将with代码块内将文件的各行存储在一个列表当中(readline()函数),再在with代码块外部进行操作
filename = 'pi_digits.txt'
with open(filename) as file_object :
lines = file_object.readlines()
for line in lines :
print(line.rstrip())
# OUTPUT
3.1415926535
8979323846
2643383279
请注意区分readline()和readlines()函数,前者只将第一行数据存放在列表中,后者是将每一行存起来
1.5 使用文件的内容
我们利用操作列表的方式,可以在with代码块外部来对获取的文件内容进行操作
filename = 'pi_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)
# OUTPUT
3.141592653589793238462643383279
注意在读取文本文件时,所有文本均会被解读为字符串,如果读取的是数字并且希望将其作为数值使用,就必须使用函数int将其转换为整数,
或者使用float()将其转化为浮点数
1.6 对大型文件进行处理
在对超大型文件进行处理时,我们应该控制其打印的位数,我们可以使用打印区间进行打印
# 只打印到52位
print(pi_string[:52] + "...")
2.文件写入
2.1 写入空文件
要将文本写入文件,我们在调用open() 时需要提供一个实参,告诉Python你要写入打开的文件
filename = 'pi_digits.txt'
with open(filename,'w') as file_object :
file_object.write("hello world!")
3.异常
3.1 处理ZeroDivisionError异常
例如在让python执行’5/0‘这个计算时,其会报错为:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero
指出一个错误对象ZeroDivisionError
3.2 利用try-except代码块来处理可能发生的异常
我们可以使用try-except代码块来为程序出现该错误时提出一个解决方案,而不是直接结束程序
try :
print(5/0)
except ZeroDivisionError:
print("You cant divide by 0!")
else :
print('you good!')
该处理方式即,尝试try代码块内的程序,如果出现ZeroDivisionError错误对象,即执行except代码块内的解决措施
当try代码块中的代码成功执行,则执行else代码块内的内容
4.存储数据
4.1 使用json.dump()和 json.load()
我们可以利用json模块来存储json格式的数据:
import json
numbers = [2,3,5,7,11,13]
filename = 'number.json'
with open(filename,'w') as f_obj :
json.dump(numbers,f_obj)
类似的我们可以用json.load()模块来读取json格式的数据,并进行操作:
filename = 'number.json'
with open(filename) as f_obj :
number_all = json.load(f_obj)
print(number_all)
# OUTPUT
[2, 3, 5, 7, 11, 13]
小结
在本章中,我针对Python如何进行文件的读写进行了学习,针对如何处理文件读写异常也进行了深入的学习。