0
点赞
收藏
分享

微信扫一扫

Python从入门到实践(九)——文件和异常

肉肉七七 2022-02-09 阅读 27

文章目录


前言

本章中我们将学习处理文件,处理大量无数据,我们将学习错误处理,避免程序因错误而奔溃,我们将学习异常,我们将学习模块json
学习处理文件和保存数据可以让你的程序使用起来更容易
学习处理异常可以帮助你应对文件中不存在的情形,以及处理可能导致程序崩溃的问题


一、文件与异常

从文件中读取数据

在处理文件时,从文件中读取数据时最基本的任务。将文件中的信息读取到内存中,我们可以一次性读取文件中的所有内容,也可以每一行逐步读取。

读取整个文件
with open(‘python.txt’) as file_object:
contents=file_object.read()
关键字with在不需要访问文件的时候将文件关闭,open()函数是打开文件并返回一个表示文件的对象。关键字as就是前面学的给文件另命名。
read()函数读取该文件中的全部内容,并将其作为一个长长的字符串储存在content中,read()函数在到达文件末尾时返回一个空字符串,这个空字符串显示出来就是一个空行,可以用rstrip()函数删去末尾的空行。

文件路径
在查找文件时,有两种确定文件位置的方法,一种是相对路径法,另一种是绝对路径法。
相对路径:就是指被打开的文件相对于该文件的相对位置,注意在文件的路径中使用反斜杠\而不是斜杠/。
绝对路径:就是指被打开的文件在电脑中的位置,一般从C、D盘开始。

逐行读取
要以每次一行的方式读取文件,可以使用for语句。
用for语句时,会发现换行符变多了,这是因为文件本身就有一个换行符,而print函数中也会自动生成一个换行符。
同样可以使用rstrip函数来消去。

创建一个包含各行内容的列表
使用关键字with时,想要调用文件的内容,只能在with结构内部使用。可以使用函数readlines(),readlines()从文件中读取每一行,并将其储存在一个列表中。之后再用for语句遍历即可。

使用文件的内容
在读取到文件中的内容后,只需要将该内容赋值给变量,我们就可以使用该文件的内容了,不过要注意文件中换行时的空格问题。

生日是否包含在字符串中
使用in语句即可。

2.写入文件

要将文本写入文件,调用open函数需要提供两个参数,第一个是文件的名称,第二个是“w”,告诉python我们将要往文档中写入内容,注意,若是文档中原先就有内容,python会将内容清空。
默认情况下,第二个参数是‘r’为读取模式,
还有一种情况为‘a’,是附加模式,python不会把原先的内容清空。
写入文件的操作为write()函数,write函数不会像print函数那样,在结尾自动换行,所以文件中要是有换行的需要,需要手动换行

3.异常

在python中若是程序出现了错误,会返回一个traceback信息,这个信息对于程序员解决问题很有必要,但是却会让用户感到费解,所以我们不需要将traceback信息呈现给用户,反而应该用一种给通俗的表达。

使用try-except代码块
将可能发生错误的代码块放在try之后,将代码块发生错误的反应放在except之后,当代码块发生错误时,将运行except后的代码。
使用try except代码块会使程序更加容错,当程序发生错误时,程序不会崩溃,反而是发出一条友好的信息。

else代码块
在try-except 中还应该包括一个代码块运行成功之后的结果,这个结果应该放在else中。

处理ZeroDivisionError和FileNoFoundError
除0错误很简单,只要在除0之前加入try-except-else代码块即可
文件未找到错误,也可以用try-except-else代码块解决。

失败时一声不吭
可以用pass语句,它提醒你程序的某个地方什么都没干,并且以后将要干什么。

4.存储数据

程序将用户的信心存放到列表或者字典中时,我们需要保存这种数据,一种简单的方式时json来存储数据。

使用json.dump()和json.load()
json.dump是用来存储数据的,json.load是用来将这些数据读取到内存中。
json.dump接受两个参数,一个是存储数据的对象,一个是将要存储到其中的文件的名称。通常使用文件扩展名.json来表明文件储存的数据为JSON格式。
json.load()将数据读取到内存中。它接受.json格式的文件。

保存和读取用户生成的数据
有了以上的两个函数,我们就能够很轻松的对用户数据进行保存了。
我们可以用json.dump()来创建一个关于用户数据的json格式的文件,从而实现保存用户数据。
用json.load()来读取已有的用户信息。

重构
代码能能够正常的运行,但是将可做进一步的改进——将代码划分为一些列完成具体工作的函数,这样的过程成为重构。

二、代码

1.

代码如下:


#学习笔记


file_name='Python_notebook.txt'
"""
with open(file_name,'w') as file_object:
    file_object.write('In Python you can learn some knowledge of list\n')
    file_object.write('In Python you can learn some knowledge of dictionary\n')
    file_object.write('In Python you can learn lots of knowledge\n')   
with open(file_name) as file_object:
    x=file_object.read()
    print(x.rstrip())
with open(file_name) as file_object:
    for line in file_object:
        print(line.rstrip())
with open(file_name) as file_object:
    lines=file_object.readlines()

note=''
for line in lines:
    note+=line
print(note)

"""

#C语言学习笔记
with open(file_name) as file_object:
    lines=file_object.read()
    while True:
        x=lines.replace('Python',"C")
        if 'Python' not in x:
            break
file_name=file_name.replace('Python','C')
with open(file_name,'w') as file_object:
    file_object.write(x)
with open(file_name) as file_object:
    print(file_object.read().rstrip())

#多个访客
while True:
    guest=input("input 'q' to exit,so what's your name: ")
    if guest=='q':
        break
    else:
        with open('guest.txt','a') as file_object:
            file_object.write(guest+'\n')
            print('hi! '+guest)
#关于程序的调查
while True:
    reason=input("input 'q' to exit,so what's the reason why you like programming: ")
    if reason=='q':
        break
    else:
        with open('reason.txt','a') as file_object:
            file_object.write(reason+'\n')
            print('I know,'+reason)   


#加法运算,类型错误
while True:

    try:
        y=int(input('请输入第一个数字'))
        x=int(input('请输入第二个数字'))
        z=x+y
    except ValueError:
        print('请输入正确的数字类型')
    else:
        print(z) 
#沉默的猫和狗
file_name=input('请输入文档名称,带后缀')
try:
    with open(file_name) as file_object:
        x=file_object.read().rstrip()
        print(x)
except FileNotFoundError:
    #print('文件不存在')
    pass

#喜欢的数字
import json

file_name='favorite_number.json'
"""
with open(file_name,'w') as file_object:
    json.dump(input('请输入你最喜欢的数字'),file_object)
with open(file_name) as file_object:
    numbers=json.load(file_object)
with open(file_name) as file_object:
    x=file_object.read().rstrip()
    print('your favourite number is '+x)

    """

#记住喜欢的数字
try:
    with open(file_name) as file_object:
        x=file_object.read().rstrip()
except FileNotFoundError:
    with open(file_name,'w') as file_object:
        json.dump(input('请输入你最喜欢的数字'),file_object)
    with open(file_name) as file_object:
        numbers=json.load(file_object)
        print('your favourite number is '+numbers)
else:
    print('I have remembered your favorite number,that is '+x)
#验证用户

def get_stored_username():
    filename='username.json'
    try:
        with open(filename) as f_obj:
            username=json.load(f_obj)
    except FileNotFoundError:
        return None
    else:
        return username

def get_new_username():
    username=input("what's your name?")
    filename='username.json'
    with open(filename,'w') as f_obj:
        json.dump(username,f_obj)
        return username

def greet_user():
    username=get_stored_username()
    if username:
        x=input('Is '+username+' your name?(yes/no)')
        if x.lower()=='yes':
            print('welcome back! '+username)
        elif x.lower()=='no':
            username=get_new_username()
            print("I'll remember you, "+username)
    else:
        username=get_new_username()
        print("I'll remember you, "+username)
greet_user()


总结

本章学习了文件、异常与存储数据。

举报

相关推荐

0 条评论