本文即将讲述:读取文件、写入文件内容、异常ZeroDivisionError、try-except处理异常、FileNotFoundError、出错时不报错pass、json存储数据:json.dump()和json.load()
1.文件
1.1 读取文件
1.新建一个文件pi_digits.txt,内容是圆周率Π,放置在工作的文件夹内。
2.同一个文件夹内放置一个.py文件,代码如下:
with open('pi_digits.txt') as file_object:
contents=file_object.read()
print(contents)
运行结果:
3.1415926535
8979323846
2643383279
解析:open(文件名)打开文件,关键字with在不再需要访问文件后将其关闭。read()到达文件末尾时返回一个空字符串,也就是输出结果中的空行
要删除末尾的空行,可在print语句中使用rstrip()
print(contents.rstrip())
文件路径
(windows)
with open(‘text_files\filename.txt’)as file_object
例子
with open('C:\Users\Athena\Desktop\pi_digits.txt')as file_object
mac和linux则把反斜杠换成斜杠
绝对路径,指定计算机具体位置。相对路径:所在文件夹内
1.2逐行读取
file_name='pi_digits.txt'
with open('pi_digits.txt')as file:
for line in file:
print(line)
结果
3.1415926535
8979323846
2643383279
好多空白行啊!原因在于文件每行末尾隐藏了换行符
同理rstrip()可以消除空白行
1.3创建关于文件各行内容的列表
file_name='pi_digits.txt'
with open('pi_digits.txt')as file:
lines=file.readlines()
for line in lines:
print(line.rstrip())
readlines()读取每一行并且存储在一个列表里
1.4把文件内容转换成字符串
关键代码:
pi_string=‘’
for line in lines:
pi_string+=line.strip()
filename='pi_digits.txt'
with open(filename)as file:
lines=file.readlines()
pi_string=''
for line in lines:
pi_string+=line.strip()
print(pi_string)
print(len(pi_string))
结果
3.141592653589793238462643383279
32
读取文本文件时,Python将其中的所有文本都解读为字符串。int() / float()转换成数值类型
只输出一部分:print(pi_string[:52])
1.5写入空文件
可指定读取模式(‘r’)、写入模式(‘w’)、附加模式(‘a’)
读取和写入文件的模式(‘r+’)
省略了模式实参,Python将以默认的只读模式打开文件
filename='s.txt'
with open(filename,'w')as file:
file.write('hello')
2.异常
出现让python无法处理的错误就会创建一个异常对象
2.1ZeroDivisionError
除以0就会触发
size=3/0
ZeroDivisionError: division by zero
2.2 try-expect(else)处理异常
try:
print(3/0)
except ZeroDivisionError:
print('dividing by zero is wrong')
try代码块中代码运行没错,则跳过except代码块,如果出错,则查找except代码块并且运行其中的代码,提醒出错信息
如果try-except代码块后面还有其他代码,程序将接着运行
目的:不让traceback信息迷惑新手用户,也不让黑客通过traceback了解文件信息发起攻击,提高代码健壮性
else 负责try代码块成功执行后的代码。
try:
answer=a/b
except ZeroDivisionError:
print('dividing by zero is wrong')
else:
print(answer)
2.3FileNotFoundError
找不到文件(路径错误/文件不存在)
filename='Question.txt'
try:
with open(filename)as file:
contents=file.read()
except FileNotFoundError:
msg='sorry,we can not find '+filename
print(msg)
结果:
sorry,we can not find Question.txt
2.4出错时一声不吭pass
filename='Question.txt'
try:
with open(filename)as file:
contents=file.read()
except FileNotFoundError:
pass
3.存储数据
JSON(JavaScript Object Notation)格式最初是为JavaScript开发的,但随后被包括Python在内的众多语言采用。
3.1 json.dump()和json.load()
json.dump(数据,存储所在文件名)
存储数据
例子:
import json
numbers=[1,2321,43,12,87,343]
filename='number.json'
with open(filename,'w')as file:
json.dump(numbers,file)
visual studio查看json文件如下
json.load())将数据读取到内存
import json
filename='number.json'
with open(filename,'r')as file:
num=json.load(file)
print(num)
结果
[1, 2321, 43, 12, 87, 343]
重构
将代码划分为一系列完成具体工作的函数