Python文件读取和异常捕捉!

🏷️ 365比分 📅 2026-02-02 11:25:56 👤 admin 👁️ 5732 ❤️ 565
Python文件读取和异常捕捉!

开始Python的复习!(以前学的忘了好多-_-)

主要参考的是Github上的一个项目:https://github.com/jackfrued/Python-100-Days

文章主要是对该项目中的内容进行学习 穿插一点自己的学习想法等内容~

文件和异常

在Python中实现文件的读写主要是通过内置的open函数,可以指定文件名、操作模式、编码信息来获得操作文件的对象,然后对文件进行读写操作。

操作模式

具体含义

'r'

读取 (默认)

'w'

写入(会先截断之前的内容)

'x'

写入,如果文件已经存在会产生异常

'a'

追加,将内容写入到已有文件的末尾

'b'

二进制模式

't'

文本模式(默认)

'+'

更新(既可以读又可以写)

读取txt文本文件

注意错误捕捉!!!

def main():

f = None

try:

f = open('致橡树.txt', 'r', encoding='utf-8')

print(f.read())

except FileNotFoundError:

print('无法打开指定的文件!')

except LookupError:

print('指定了未知的编码!')

except UnicodeDecodeError:

print('读取文件时解码错误!')

finally:

if f:

f.close()

if __name__ == '__main__':

main()

在Python中,可以将那些在运行时可能会出现状况的代码放在try中,在try后边加上一个或多个except来捕获可能的异常情况。在上文的代码块中,使用三个except来捕捉错误,最后使用finally代码块来关闭打开的文件。

注意:finally代码块不论程序是否正常都会被执行(甚至调用sys模块的exit函数退出Python环境,finally块都会被执行)

如果不愿意在finally代码块中关闭文件对象释放资源,也可以使用上下文语法,通过with关键字指定文件对象的上下文环境并在离开上下文环境时自动释放文件资源,代码如下所示。

def main():

try:

with open('致橡树.txt', 'r', encoding='utf-8') as f:

print(f.read())

except FileNotFoundError:

print('无法打开指定的文件!')

except LookupError:

print('指定了未知的编码!')

except UnicodeDecodeError:

print('读取文件时解码错误!')

if __name__ == '__main__':

main()

除了使用文件对象的read方法读取文件之外,还可以使用for-in循环逐行读取或者用readlines方法将文件按行读取到一个列表容器中,代码如下所示。

import time

def main():

# 一次性读取整个文件内容

with open('致橡树.txt', 'r', encoding='utf-8') as f:

print(f.read())

# 通过for-in循环逐行读取

with open('致橡树.txt', mode='r') as f:

for line in f:

print(line, end='')

time.sleep(0.5)

print()

# 读取文件按行读取到列表中

with open('致橡树.txt') as f:

lines = f.readlines()

print(lines)

if __name__ == '__main__':

main()

同理还会有对二进制文件的读取,与上述方法类似,在模式参数那里改一改就好。

重点介绍一些JSON格式文件的读取。

这类文件主要用来存储一个列表或一个字典中的数据。JSON是“JavaScript Object Notation"的缩写,本来是JavaScript语言中创建对象的一种字面量语法,现在已经被广泛应用于跨平台跨语言的数据交换。目前JSON已经取代XML作为异构系统间教化数据的事实标准。

更多参见JSON的官方网站:http://json.org

我们使用Python中的json模块就可以将字典或列表以JSON格式保存到文件中,代码如下所示。

import json

def main():

mydict = {

'name': '骆昊',

'age': 38,

'qq': 957658,

'friends': ['王大锤', '白元芳'],

'cars': [

{'brand': 'BYD', 'max_speed': 180},

{'brand': 'Audi', 'max_speed': 280},

{'brand': 'Benz', 'max_speed': 320}

]

}

try:

with open('data.json', 'w', encoding='utf-8') as fs:

json.dump(mydict, fs)

except IOError as e:

print(e)

print('保存数据完成!')

if __name__ == '__main__':

main()

相关内容

陬隧的解釋
365bet欧洲

陬隧的解釋

📅 10-01 👁️ 9245
山西最美古村:世外桃源——平顺井底村
365bet怎么提现

山西最美古村:世外桃源——平顺井底村

📅 08-24 👁️ 3776
【2022卡塔尔世界杯战报】E组日本西班牙出线