Python中的文件和异常

Python中的文件和异常

1.从文件中读取数据

文件可以存储大量的数据,我们有时需要在程序中读入文件中的数据,这就需要在文件中将文件打开并读入数据。

1.1读取整个文件
我们使用open()方法打开一个文件,open方法中的参数就是文件名,open函数会返回一个对象,我们使用一个参数去接收。此外,我们每次使用完文件都需要将它关闭,可以使用close()将其关闭,我们也可以使用with关键字,它可以自动关闭打开的文件,不需要使用close关闭。
使用格式:
with open(‘文件名’) as 参数名:
对文件的操作…

我们有了文件的对象后,可以调用文件对象的read()方法读取文件中的内容,并将其存储在一个变量中。
我们先创建一个practice的文本,往里面写入一些字符,然后通过下面这段代码将字符读取出来,注意:创建的文本和当前的执行文件要在同一工作目录下,不然程序找不到该文件。

with open('practice') as file_object:
    context = file_object.read()
    print(context)


运行结果:
在这里插入图片描述

1.2 文件路径
我们刚才提到,如果open()函数的参数是文件名,则文件和当前的执行文件必须在同一工作目录下程序才能找到该文件。
但是我们有时候可能需要打开不在文件目录下的文件,这时候我们就需要将读取文件的路径作为open函数的参数。
我们可以将文件的相对路径或绝对路径作为参数。
需要注意的是,如果程序报出unicode error这个错误,我们要把路径中的\改成//。
Windows有时候能正确解读文件中路径中的斜杠。有时候由于反斜杠又是转义标记,所以需要用上面的方法,或者在开头的单引号前加上r使其变为原生字符串。

with open('C://Users//lwn//Desktop//practice.txt') as file_object:
    context = file_object.read()
    print(context)


1.3 逐行读取
有时候读取文件时,我们需要检查其中的一行,或者在文件中查找特定的信息,这时候我们就可以逐行读取文件信息。
我们用for循环遍历文件即可完场逐行读取。

filename  ='C://Users//lwn//Desktop//practice.txt'
with open(filename) as file_object:
    for line in file_object:
        print(line)

运行结果:
在这里插入图片描述
我们可以看到,每一行中间有很多空白行。
因为在这个文件中,每一行的末尾都有一个看不见的换行符,而print语句又会加上一个换行符,因此就会有两个换行符:一个来自文件,另一个来自print语句。要消除这些多余的空白行,我们可以在print语句中使用rstrip()。

filename  ='C://Users//lwn//Desktop//practice.txt'
with open(filename) as file_object:
    for line in file_object:
        print(line.rstrip()

运行结果如下:
在这里插入图片描述
可以看到空白行已经消失了。

1.4 创建一个包含文件各行内容的列表
当我们使用with关键字的时候,open函数返回的文件对象只能在with的作用域内使用。如果我们要在with作用域之外使用读出的内容,我们可以在with作用域内把文件的每一行内容存放在一个列表里面,这样就算出了文件对象的作用域,我们也能使用文件中的内容。
这时候我们可以使用readlines()方法,这个方法可以读取文件中的每一行内容并存储在一个列表中,再返回这个列表。

filename  ='C://Users//lwn//Desktop//practice.txt'
with open(filename) as file_object:
    lines = file_object.readlines()
for line in lines:
    print(line.rstrip())

1.5 使用文件中的内容
我们在读取完文件中的内容后将其存储在列表中,之后我们就可以使用文件中的内容了。
比方说,我们要把刚才那个文件中读取的内容连成一行字符串并打印出来。

filename  ='C://Users//lwn//Desktop//practice.txt'
with open(filename) as file_object:
    lines = file_object.readlines()
strline = ''
for line in lines:
    strline += line.strip()
print(strline)

我们需要用strip方法去掉每一行的空格。
运行结果:
在这里插入图片描述
注意:我们读取文件内容时默认读取的是字符串,如果我们需要读取数字需要直接使用int()将其转换为整型,或者使用float()将其转换为浮点型。

2.写入文件

我们除了能够读取文件,还能向文件中存储信息,向文件中写入数据。在程序执行完毕后,这些写入的数据也依旧存在。

2.1 写入空文件
我们要向文件中写入文本,就需要在open函数中提供另一个参数:打开方式参数。
open()函数我们需要提供两个参数,一个是文件名,另一个就是打开方式。
文件的打开方式有几种:
‘w’:写入模式
‘r’:读取模式
‘a’:附加模式
‘r+’:能够读取和写入的模式
如果我们不写这个打开方式参数,默认是只读模式,即不能向文件写入数据。

当我们指定了写入模式时,如果我们要写入的文件不存在,Python就会自动创建这个文件。
注意,如果我们以’w’方式打开文件,如果该文件不为空,Python会自动清空原文件。
我们使用文件对象的方法write()向文件写入信息。
要注意,我们向文件中写入信息都是以字符串的形式写入的,如果我们要向文件中写入数据,必须用str()方法将数据转换为字符串的形式。

filename  ='C://Users//lwn//Desktop//practice.txt'
with open(filename, 'w') as file_object:
    file_object.write('I love Python')

2.2 写入多行
write()函数不能在写入数据时自动换行,因此如果我们要写入多行数据,我们要在写入文本中加入换行符(‘\n’)。

2.3 附加到文件
如果我们想向一个非空文件添加内容,我们就可以使用附加模式打开文件,这个模式打开文件时,我们向文件写入内容就不会覆盖原文件的内容,而是会添加到原内容的后面。如果文件不存在,Python会创建一个空文件。
附加模式:‘a’

3.异常

当我们在运行程序的时候,难免会出现异常。Python在程序运行出错的时候,都会生成一个异常对象。如果我们编写了处理该异常的代码,那么程序就会继续运行下去,如果没有那么程序就会终止运行,并返回一个Traceback,其中包含了有关异常的报告。
异常是使用try-except代码块进行处理的,当异常被捕获时,Python就会执行try-except代码块中的操作。因此,如果我们编写了try-except代码块,那么就算碰到异常,程序也会有相应的处理办法并继续执行下去。

3.1 处理ZeroDivisionError异常
我们知道,不能用一个数除以0,同样的在程序中这样计算就会报错,会返回一个叫ZeroDivisionError的异常对象。
在这里插入图片描述
Traceback中会提醒你返回的异常对象,我们可以根据这些信息对程序进行修改。

3.2 使用try-except代码块
我们可以使用try-except代码块来处理可能引发的异常。

使用格式:
try:
可能引发异常的代码
except 异常名称:
处理异常的操作

我们把可能引发错误的代码放入try代码块中,如果没有发生异常,程序就会跳过except代码块,如果出现异常,程序就会看出现的异常是否和except后面指定的异常一样,如果不一样则程序终止;如果一样则会执行except代码块中的操作,并且继续执行后面的代码。
在这里插入图片描述
可以看到程序不会停止运行报出Traceback,而是会执行except中的代码块。

3.3 else代码块
我们把可能出错的代码放在try代码块中,出错后执行的代码放在except代码块中。并且,我们可以把try代码块执行成功(即没有出现异常)要执行的代码放入else块中。
在这里插入图片描述

4.存储数据

我们在程序中可以使用列表,字典等数据结构存储数据,但是这些数据在程序运行结束之后就会消失,无法永久存储。因此,我们需要把数据写入文件中,从而使得程序运行结束后数据依然存在,这时候我们可以使用JSON模块来存储数据。
JSON模块可以使Python中简单的数据结构存储到文件中,并在程序再次运行的时候再次加载该文件。同时,JSON不是Python特有的,这能让以JSON格式存储的数据与其他编程语言共享。

4.1 使用json.dump()和json.load()
我们在导入json模块后:
使用json.dump()向文件中写入数据,这个函数有两个参数,一个是要存储的数据(可以是列表和字典),一个是存入的文件。
使用json.load()读取文件中的数据,这个函数有一个参数,即文件名。
在这里插入图片描述
4.2 重构
有时候,我们需要把代码做进一步的改进,让代码划分成一些列要完成具体工作的函数,一个函数完成一个小功能,这样的过程就叫重构。重构可以让代码更清晰,更容易理解。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值