一、文件处理
从文件读取数据:
1.读取整个文件
with open('a.txt') as fb:
contents=fb.read()
print(contents)
第一行打开文件,这个文件必须要和这个程序在同一目录下
a.如果文本在当前程序的另一个文件夹下,就采用相对路径,如,程序在python_work 下,而a.txt在python_work下的text_files文件夹下
with open('text_files/a.txt') as fb
b.可以采用绝对路径,这样不管文本在哪里,都可以。如我把文本放在桌面上:
with open('C:/Users/wjh/Desktop/a.txt') as fb:
fb.read读取文件内容
2.逐行读取,采用for循环:
with open('a.txt') as fb:
for line in fb:
print(line)
输出:
与之前对比,每一行有空白
注意:读取文本是,python将其中的文本解读为字符串
写入文件
1.调用open()时需要提供两个实参:
filename='a.txt'
with open(filename,'w') as fb:
fb.write("i love progranmming!")
open()调用两个实参:
1.文件名称filename,当我们是写入文件时,注意:a,如果文件名称不存在,open自动创建它,b,如果文件存在,并且有内容,我们只采用写入模式'w',Python会清空文件内容,只会储存写入的内容。
2.‘w',这是告知Python以什么模式运行,'w'是写入模式,'r'是阅读模式,附加模式'a'(写入模式会清空文件,不想要这种,就可以以附加模式),及读写模式'r+'python 默认的模式是只读模式,
注意:Python写入的只有字符串,想将数值写入,先将数值用str()转换为字符串。
输出如下:
2.写入多行
因为write()不会添加换行符,所以要在末尾添加换行符
filename='a.txt'
with open(filename,'w') as fb:
fb.write("i love progranmming!\n")
fb.write("i love python!\n")
输出如下:
二、异常
异常就是Python管理程序执行阶段出现的错误,一般情况下,在上几章的的时候,我们操作代码的时候肯定会出现异常,导致执行出现traceback,告诉我们哪里出现了问题
异常处理就可以出现了异常,程序依然可以继续执行,异常是使用try-except代码块处理的,它就是告知程序出现异常了接着怎么做。
异常有很多,等几天我总结下我学习中遇到的一些异常问题。现在就简单说书上的例子;
1.处理ZeroDivisionError异常:
通常情况下,你编码除以0的时候编译可能没有错,但运行的时候会出现错误,出现traceback,你这个时候就可以使用异常处理
print(5/0) #验证出现的异常
#使用异常处理
try:
print(5/0)
except ZeroDivisionError:
print("you can't divide by zero!")
使用try-except,当try里代码没有问题,Python会直接跳过except里的代码
输出如下:
使用异常处理可以避免程序崩溃:可以处理无效的输入,就拿上面的程序来看,我们在运作计算器的时候,可以当出现0的时候提示用户不能除以0,然后接着让用户输入数值:
#输入两个数字,相除,当输入的是quit退出程序
while True:
first_num=input("\nFirst number: ")
if first_num=='quit':
break
second_num=input("\nSecond number: ")
try:
answer=int(first_num)/int(second_num)
except ZeroDivisionError:
print("you can't divide by zero!")
else:
print(answer)
将一些可能会出现的异常放到try-except里,再加上else语句,将try下的代码成功执行后再执行的代码放入else语句中,
输出如下:
2.处理FileNotFoundError异常:
在处理文件时会经常出现以下问题:文件找不到,文件名称不正确或者不存在,下面验证文件不存在出现的异常:
filename='22.txt' #不存在该文件
with open(filename) as fb:
contents=fb.read()
print(contents)
处理异常时,要知道异常在何处产生,上面的在open函数那里产生异常,所以异常处理;
filename='22.txt' #不存在该文件
try:
with open(filename) as fb:
contents=fb.read()
except FileNotFoundError:
print("sorry,the file can't found!please check your file!")
else:
print(contents)
上面的程序是出现异常是告知你出现的问题,但有时候你也需要不用告知,直接pass掉异常:
try:
code
except 异常:
pass
三、存储数据
采用json模块来存储数据
1.json.dump()和json.load()
json.dump()用于存储数据,他接受两个实参,要存储的数据以及可用于存储数据的文件对象,json.load()用于将数据读取到内存,举实例如下:
import json #导入json模块
numbers=[2,3,4,5,6]
filename='digits.json'
with open(filename,'w') as fb:
json.dump(numbers,fb)
输出如下:生成的json文件在浏览器打开的界面
import json #导入json模块
filename='digits.json'
with open(filename) as fb:
num=json.load(fb)
print(num)
2.保存数据和读取数据
我们用的一些网站和APP经常注册用户,下面来模拟下,输入用户名字后,保存用户名,然后在想保存过得用户名打招呼
#存储用户名
import json
username=input("please input your name:\n")
filename='username.json'
with open(filename,'w') as fb:
json.dump(username,fb)
#打招呼
import json
filename='username.json'
with open(filename) as fb:
username=json.load(fb)
print("welcome back! "+username)
python的最大一个特点就是代码简洁,所以当基本代码完成后,我们可以思考可以重构代码,让界面变得更简洁。对于上面的代码我们可以优化下,python之前学习的函数与类就有很大的作用。封装性!
import json
def greet_user(): #定义函数,向用户打招呼
filename='name.json'
try: #异常处理,第一次用户输入,文件不存在
with open(filename) as fb:
username=json.load(fb)
except FileNotFoundError: #当文件不存在的时候,提醒用户输入,存储数据
username=input("please input your name:\n")
with open(filename,'w') as fb:
json.dump(username,fb)
print("welcome ! "+username)
else:
print("welcome back!"+username)
这是第一次输入
这是在存储数据后再运行的结果。
日后写代码就是不断地优化再优化,尽量使自己的代码简单明了。