Python学习笔记:18 文件读写和异常处理

编程入门 行业动态 更新时间:2024-10-08 08:32:22

Python<a href=https://www.elefans.com/category/jswz/34/1770117.html style=学习笔记:18 文件读写和异常处理"/>

Python学习笔记:18 文件读写和异常处理

打开和关闭文件

使用Python内置的open函数来打开文件,在使用open函数时,我们可以通过函数的参数指定文件名操作模式字符编码等信息,接下来就可以对文件进行读写操作了。这里所说的操作模式是指要打开什么样的文件(字符文件或二进制文件)以及做什么样的操作(读、写或追加),具体如下表所示。

操作模式具体含义
'r'读取 (默认)
'w'写入(会先截断之前的内容)
'x'写入,如果文件已经存在会产生异常
'a'追加,将内容写入到已有文件的末尾
'b'二进制模式
't'文本模式(默认)
'+'更新(既可以读又可以写)

下图展示了如何根据程序的需要来设置open函数的操作模式。

在使用open函数时,如果打开的文件是字符文件(文本文件),可以通过encoding参数来指定读写文件使用的字符编码。如果没有指定该参数,则使用系统默认的编码作为读写文件的编码。当前系统默认的编码可以通过下面的代码获得。

import sysprint(sys.getdefaultencoding())

结束文件操作时,需要使用文件对象的close方法释放这个文件。

读写文本文件

读取纯文本文件

file = open('致橡树.txt', 'r', encoding='utf-8')
print(file.read())
file.close()

如果要向文件中写入内容,可以在打开文件时使用w或者a作为操作模式,前者会截断之前的文本内容写入新的内容,后者是在原来内容的尾部追加新的内容。

file = open('resources/小雨康桥的诗.txt', 'w', encoding='utf-8')
file.write('我想做燕子\n')file.write('只需要简单想想\n')file.write('只求风中流浪\n')file.write('我想做树\n')file.write('不长六腑五脏\n')file.write('不会寸断肝肠\n')
file = open('resources/小雨康桥的诗.txt', 'a', encoding='utf-8')file.write('我做不成燕子\n')file.write('所以我飞不过感情的墙\n')file.write('我做不成树\n')file.write('因此也撑不破伤心的网\n')

异常处理机制

如果open函数指定的文件并不存在或者无法打开,那么将引发异常状况导致程序崩溃。为了让代码具有健壮性和容错性,我们可以使用Python的异常机制对可能在运行时发生状况的代码进行适当的处理。Python中和异常相关的关键字有五个,分别是tryexceptelsefinallyraise

file = open('D:\\python text\\致橡树.txt', 'r', encoding='utf-8')
try:data = file.read(32)while data:print(data, end='')data = file.read(32)
finally:file.close()

在Python中,我们可以将运行时会出现状况的代码放在try代码块中,在try后面可以跟上一个或多个except块来捕获异常并进行相应的处理。由于finally块的代码不论程序正常还是异常都会执行。

上面的代码中,read函数中的参数表示以多少个字节读取文件,通常这个参数必须是2的n次幂。

上下文语法

对于open函数返回的文件对象,还可以使用with上下文语法在文件操作完成后自动执行文件对象的close方法,这样可以让代码变得更加简单,在离开with上下文的时候,会自动关闭文件,无论是正常离开还是异常离开,因此不需要再写finally代码块来执行关闭文件释放资源的操作。

with open('resources/小雨康桥的诗.txt', 'a', encoding='utf-8') as file:file.write('我做不成燕子\n')file.write('所以我飞不过感情的墙\n')file.write('我做不成树\n')file.write('因此也撑不破伤心的网\n')

读写二进制文件

读写二进制文件跟读写文本文件的操作类似,但是需要注意,在使用open函数打开文件时,如果要进行读操作,操作模式是'rb',如果要进行写操作,操作模式是'wb'。还有一点,读写文本文件时,read方法的返回值以及write方法的参数是str对象(字符串),而读写二进制文件时,read方法的返回值以及write方法的参数是bytes-like对象(字节串)。

读取图片

file = open('D:\\Users\\Public\\Pictures\\travel\\aiwanting.jpg', 'rb')
# 移动文件指针到文件末尾
file.seek(0, 2)
# 通过tell可以获取到文件指针移动的字节数,这个字节数救赎文件的大小查看文件大小
print(file.tell())
# 将文件指针移动到文件最开始的位置
file.seek(0, 0)
try:data = file.read(512)while data:print(data, end='')data = file.read(512)
finally:file.close()

文件复制

def file_copy(source_file, target_file):with open(source_file, 'rb') as source_file:with open(target_file, 'wb') as target_file:data = source_file.read(512)while data:target_file.write(data)data = source_file.read(512)if __name__ == '__main__':file_copy('resources/pavilion.jpg', 'resources/AiWan_pavilion.jpg')

读写CSV文件

读取CSV文件

import csvwith open('resources/2018年北京积分落户数据.csv', 'r', encoding='utf-8') as file:# delimiter ---> 设置分隔符(默认是英文的逗号)# quotechar ---> 包裹字符串的字符(默认是英文的双引号)reader = csv.reader(file, delimiter=',', quotechar='"')for line in reader:print(line)

reader函数除了要传入读取的文件对象外,还可以通过delimiterquotechar参数来指定分隔符(默认是逗号)、包围值的字符(默认是双引号)。

将数据写入CSV文件

import csvwith open('resources/temperature.txt', 'r', encoding='utf-8') as file1:# newline ---> 默认是换行,因为写的时候已经是在每行写,因此把newline的值改为空,才不会产生多余的空行with open('resources/result.csv', 'w', encoding='utf-8', newline='') as file2:writer = csv.writer(file2)# writerow的方法参数是一个列表或一个元组(代表一行中所有的数据,默认用逗号分隔)writer.writerow(['id', 'temperature', 'info'])content = file1.readline()while content:no, temp = content.split()temp = float(temp)if temp >= 37.2:if temp <= 38.5:info = '发热'else:info = '高热'writer.writerow([no, temp, info])content = file1.readline()

temperature.txt文件中是病人编号与体温的信息,题目要求是将体温异常的病人选出来写入CSV文件中,其中温度范围在37.2到38.5之间为发热病人,温度高于38.5则为高热病人。

writerow函数表示写入一行数据,默认用逗号分隔,参数是一个列表或一个元组。

更多推荐

Python学习笔记:18 文件读写和异常处理

本文发布于:2024-02-28 02:56:34,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1767402.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:学习笔记   异常   文件   Python

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!