python读取文件需要的异常处理_Python基础:文件的简单读取和操作以及异常处理...
Python提供了直接获取文件对象的方法,方便我们直接操作文件。
下面我们就使用Python对文件的读取、写入以及数据存储进行整理说明,以及Python对异常的处理。
获取文件对象
打开一个txt文件
在开始一堆概念之前,我们先看一个简单的实例,我们新建一个名为names.txt的文本文件,用来存储一些人名:
1
2
3jinx
yasuo
dongoog
现在我们使用Python内置函数open来打开这个文件:
1
2
3
4
5
6
7
8
9def (filename):
'''打开指定文件并读取文件内容'''
file_obj = open(filename)
content = file_obj.read() #读取文件
file_obj.close() #关闭文件
print(content)
openfile('names.txt')
其中的file_obj就是文件对象。
文件对象和open函数文件对象(file object)对外提供面向文件 API 以使用下层资源的对象。实际上共有三种类别的文件对象: 原始 二进制文件, 缓冲 二进制文件 以及 文本文件。它们的接口定义均在 io 模块中。创建文件对象的规范方式是使用 open() 函数。
我们使用内置函数open函数来创建一个文件对象,open的语法为:
open(file*name, *mode=’r’, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None
filename:是必要参数,表示文件的目录及名称
mode:可选,指定文件的打开模式,有以下几种模式(具体参考官方文档):
字符
意义
'r'
读取(默认)
'w'
写入,并先截断文件
'x'
排它性创建,如果文件已存在则失败
'a'
写入,如果文件存在则在末尾追加
'b'
二进制模式
't'
文本模式(默认)
'+'
更新磁盘文件(读取并写入)
encoding:指定编码方式
使用with关键字
在打开names.txt的例子中我们打开了文件之后需要手动关闭文件,这是释放资源所必须的操作,但是如果在执行close之前程序出现了bug,就如法正常释放文件资源。
所以我们需要使用with关键字来代替这种手动释放资源的写法:
1
2
3
4
5
6
7
8def (filename):
'''打开指定文件并读取文件内容'''
with open(filename) as file_obj:
content = file_obj.read() #读取文件
print(content)
openfile('names.txt')
这样,使用了with结构的代码,我们就无需手动释放资源而是交给Python来自动处理。
写入文件
w模式:直接写入
我们使用w模式就可以向文件中写入我们需要的文本数据:
1
2
3
4
5
6
7def writefile(filename, data):
'''写入文件'''
with open(filename, 'w') as file_obj: #写入模式打开文件
file_obj.write(data) #写入数据
data = 'jinx, yasuo, dongoog'
writefile('names.txt', data)
注意:写入模式文件名filename可以不存在,如果存在,在写入数据前会先清空原文件数据再写入。
a模式:附加写入
顾名思义,写入的数据是在源文件的最后附加写入的数据。
1
2
3
4
5
6
7def writefile(filename, data):
'''写入文件'''
with open(filename, 'a') as file_obj: #附加写入模式打开文件
file_obj.write(data) #写入数据
data = ', linux, daday'
writefile('names.txt', data)
附加写入同样不需要filename能够访问到
异常处理
在读取txt文件的例子中,如果我们事先没有创建names.txt文件,程序就会报FileNotFoundError的错误。
很多时候程序的bug并不是我们所能控制的,比如这个文件名由用户来输入,但是文件并不存在,这个时候我们的程序应该正常运行,适当的,我们还应该给用户及时的反馈信息,以告知发生了什么错误。
Python的异常使用try….except…else的语法结构进行异常处理,语法如下:
1
2
3
4
5
6
7
8
9> try:
> #运行别的代码
> except :
> #如果在try部份引发了'name'异常
> except ,:
> #如果引发了'name'异常,获得附加的数据
> else:
> #如果没有异常发生
>
所以,在读取文本的例子中,为了让程序更加健壮,或者说程序运行错误时也能继续执行下去,我们需要进行改进:
1
2
3
4
5
6
7
8
9
10
11
12
13def (filename):
'''打开指定文件并读取文件内容'''
try:
with open(filename) as file_obj:
content = file_obj.read()
except FileNotFoundError:
print('文件 %s 不存在' % filename)
except: #其他未知错误
print('文件 %s 打开失败' % filename)
else:
print(content)
openfile('my_names.txt')
数据的存取
这里的存储数据和上文的写入数据同样是将数据保存到本地文件中,但区别在于直接写入的数据只能是字符的形式,并不能保持数据的形式,要进行数据存储,我们需要借助json库。
比如列表names = ['jinx', 'yasuo', 'dongoog'] ,我们直接写入文档中需要先转为字符串的形式:'jinx, yasuo, dongoog',这就不能保存数据的完整性,即丢了列表标志符号[]。
使用json.dump存储数据
使用json库进行数据存储:
1
2
3
4
5
6
7
8
9
10import json
def use_json_dump(filename, data):
'''使用json.dump存储数据'''
with open(filename, 'w') as file_obj:
json.dump(data, file_obj) #替代文件对象的write方法
filename = 'names.txt'
data = ['jinx', 'yasuo', 'dongoog']
use_json_dump(filename, data)
dump函数的可选参数还有很多,具体参考官方文档:json.dump。
使用json.load读取数据
同样的,如果仅仅使用read函数读取数据,只能得到字符串:
1["jinx", "yasuo", "dongoog"]
但是使用json.load就可以返回原数据类型:列表
1
2
3
4
5
6
7
8
9
10
11
12import json
def use_json_laod(filename):
'''使用json.load读取数据'''
with open(filename) as file_obj:
names = json.load(file_obj) #替代文件对象的read方法
for name in names:
print(name)
filename = 'names.txt'
use_json_laod(filename)
python读取文件需要的异常处理_Python基础:文件的简单读取和操作以及异常处理...相关推荐
- python文件操作与异常处理_Python学习——文件操作和异常处理
在上一篇文章中,我们介绍了 Python 的函数和模块,现在我们介绍 Python 中的异常和文件. 查看上一篇文章请点击:https://www.cnblogs.com/dustman/p/9963 ...
- python文件不存在异常_Python基础知识:文件和异常
1.相对路径:如果文件和程序在同一文件夹内,可不用路径:如果文件在程序所在文件夹下一级文件夹中,只需添加下一级文件夹名称即可: 在Linux和OS系统中:文件路径中使用斜杠(/) 在Windows系统 ...
- python文件读写_python基础-文件读写'r' 和 'rb'区别
一.Python文件读写的几种模式: r,rb,w,wb 那么在读写文件时,有无b标识的的主要区别在哪里呢? 1.文件使用方式标识 'r':默认值,表示从文件读取数据. 'w':表示要向文件写入数据, ...
- python def return 文件_python基础-文件处理与函数
1. 文件处理 1.1 文件处理流程 1.打开文件,得到文件句柄并赋值给一个变量 2.通过句柄对文件进行操作 3.关闭文件 1.2 文件读取模式r r文本模式的读,在文件不存在,不会创建新文件 f = ...
- python with open 循环建立指定名字文件_Python基础——文件
作者丨文静 来源丨医数思维云课堂(ID:Datamedi) 文件(file) 1. 通过python程序来对计算机中的各种文件进行增删改查的操作. 2. I/O(Input/Output),文件的输入 ...
- python从文件中读取数据时出现错误_Python 从文件中读取数据
读取整个文件 # 案例:读取整个文件 # pi_digits.txt 3.1415926535 8979323846 2643383279 # file_reader.py with open ('p ...
- python跨文件调用lambda函数_python基础-4 函数参数引用、lambda 匿名函数、内置函数、处理文件...
1 语法2 以下是round()方法的语法:3 4 round( x [, n] )5 参数6 x --这是一个数值表达式7 8 n --这也是一个数值表达式9 10 返回值11 该方法返回 x 的小 ...
- python中返回上一步操作的代码_python基础-文件操作
一.文件操作 打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作. 打开文件的模式有: r ,只读模式[默认模式,文件必须存在,不存在则抛出异 ...
- python不是内部文件别太任性_Python对文件的操作
Python的文件操作 什么是IO 在计算机中 I/O 是指 Input/Output,即 Stream (流)的输入和输出,输入和输出是相对于内存来说的.程序运行时数据都驻留在在内存当中,由 CPU ...
最新文章
- usaco Preface Numbering 序言页码
- Windows10安装TensorFlow GPU版本
- 直接从JBoss AS 7组件使用JGroups
- java中打开文件显示_在默认文件资源管理器中打开文件,并使用JavaFX或普通Java突出显示它...
- C语言转义字符的使用
- RabbitMQ入门学习系列(四) 发布订阅模式
- android stringbuilder 一次插入多条数据_android开发面试题解析
- C#中的Invoke和BeginInvoke
- BP神经网络的数学原理及其算法实现
- 蓝海灵豚医疗器械管理隐形眼镜专版用户指南5.9.0.0
- 技术书籍也香艳——《Head Fisrt 设计模式》
- 成也苹果败也苹果,曾经女首富身价缩水一半
- C语言——相关学习资源网站及工具
- 秉火429笔记之十四 USART--串口通信
- 用Excel数据透视表快速地统计各部门的男女比例
- openfire 下载安装
- php读取excel文件的数据,如何使用php获取excel文件数据
- jquery 获取某个值得键名_jquery中获取元素里某一特定子元素的代码
- 【Node】nvm 版本管理工具
- 请帮忙。。。 使用谷歌代码网站上的开源代码,为指定站点提供AJAX定制搜索
热门文章
- 最易出现的几种心理状态,让人崩溃!
- 用 WasmEdge 和 YoMo 对实时数据流进行 AI 推理
- android实现下载功能实现,Android开发之DownloadManager的使用
- 免费送机械键盘,不是粉丝的绕道!!!
- 个人比较喜欢的flash小游戏
- perl mysql 数据推拉_科学网—从MySQL数据库中提取序列并进行引物设计的perl脚本 - 闫双勇的博文...
- perl的Math::Combinatorics模块实现全排列
- Open3D键盘切换上下帧显示点云
- nefuoj 9 喜洋洋
- Matlab:如何在图像标出特殊点(最大值/最小值)