记录python学习之路--------------------------------------------文件与异常

一、文件处理

从文件读取数据:

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)

    这是第一次输入

这是在存储数据后再运行的结果。

日后写代码就是不断地优化再优化,尽量使自己的代码简单明了。

猜你喜欢

转载自blog.csdn.net/shinhwa96/article/details/84072837