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基础:文件的简单读取和操作以及异常处理...相关推荐

  1. python文件操作与异常处理_Python学习——文件操作和异常处理

    在上一篇文章中,我们介绍了 Python 的函数和模块,现在我们介绍 Python 中的异常和文件. 查看上一篇文章请点击:https://www.cnblogs.com/dustman/p/9963 ...

  2. python文件不存在异常_Python基础知识:文件和异常

    1.相对路径:如果文件和程序在同一文件夹内,可不用路径:如果文件在程序所在文件夹下一级文件夹中,只需添加下一级文件夹名称即可: 在Linux和OS系统中:文件路径中使用斜杠(/) 在Windows系统 ...

  3. python文件读写_python基础-文件读写'r' 和 'rb'区别

    一.Python文件读写的几种模式: r,rb,w,wb 那么在读写文件时,有无b标识的的主要区别在哪里呢? 1.文件使用方式标识 'r':默认值,表示从文件读取数据. 'w':表示要向文件写入数据, ...

  4. python def return 文件_python基础-文件处理与函数

    1. 文件处理 1.1 文件处理流程 1.打开文件,得到文件句柄并赋值给一个变量 2.通过句柄对文件进行操作 3.关闭文件 1.2 文件读取模式r r文本模式的读,在文件不存在,不会创建新文件 f = ...

  5. python with open 循环建立指定名字文件_Python基础——文件

    作者丨文静 来源丨医数思维云课堂(ID:Datamedi) 文件(file) 1. 通过python程序来对计算机中的各种文件进行增删改查的操作. 2. I/O(Input/Output),文件的输入 ...

  6. python从文件中读取数据时出现错误_Python 从文件中读取数据

    读取整个文件 # 案例:读取整个文件 # pi_digits.txt 3.1415926535 8979323846 2643383279 # file_reader.py with open ('p ...

  7. python跨文件调用lambda函数_python基础-4 函数参数引用、lambda 匿名函数、内置函数、处理文件...

    1 语法2 以下是round()方法的语法:3 4 round( x [, n] )5 参数6 x --这是一个数值表达式7 8 n --这也是一个数值表达式9 10 返回值11 该方法返回 x 的小 ...

  8. python中返回上一步操作的代码_python基础-文件操作

    一.文件操作 打开文件时,需要指定文件路径和以何等方式打开文件,打开后,即可获取该文件句柄,日后通过此文件句柄对该文件操作. 打开文件的模式有: r ,只读模式[默认模式,文件必须存在,不存在则抛出异 ...

  9. python不是内部文件别太任性_Python对文件的操作

    Python的文件操作 什么是IO 在计算机中 I/O 是指 Input/Output,即 Stream (流)的输入和输出,输入和输出是相对于内存来说的.程序运行时数据都驻留在在内存当中,由 CPU ...

最新文章

  1. usaco Preface Numbering 序言页码
  2. Windows10安装TensorFlow GPU版本
  3. 直接从JBoss AS 7组件使用JGroups
  4. java中打开文件显示_在默认文件资源管理器中打开文件,并使用JavaFX或普通Java突出显示它...
  5. C语言转义字符的使用
  6. RabbitMQ入门学习系列(四) 发布订阅模式
  7. android stringbuilder 一次插入多条数据_android开发面试题解析
  8. C#中的Invoke和BeginInvoke
  9. BP神经网络的数学原理及其算法实现
  10. 蓝海灵豚医疗器械管理隐形眼镜专版用户指南5.9.0.0
  11. 技术书籍也香艳——《Head Fisrt 设计模式》
  12. 成也苹果败也苹果,曾经女首富身价缩水一半
  13. C语言——相关学习资源网站及工具
  14. 秉火429笔记之十四 USART--串口通信
  15. 用Excel数据透视表快速地统计各部门的男女比例
  16. openfire 下载安装
  17. php读取excel文件的数据,如何使用php获取excel文件数据
  18. jquery 获取某个值得键名_jquery中获取元素里某一特定子元素的代码
  19. 【Node】nvm 版本管理工具
  20. 请帮忙。。。 使用谷歌代码网站上的开源代码,为指定站点提供AJAX定制搜索

热门文章

  1. 最易出现的几种心理状态,让人崩溃!
  2. 用 WasmEdge 和 YoMo 对实时数据流进行 AI 推理
  3. android实现下载功能实现,Android开发之DownloadManager的使用
  4. 免费送机械键盘,不是粉丝的绕道!!!
  5. 个人比较喜欢的flash小游戏
  6. perl mysql 数据推拉_科学网—从MySQL数据库中提取序列并进行引物设计的perl脚本 - 闫双勇的博文...
  7. perl的Math::Combinatorics模块实现全排列
  8. Open3D键盘切换上下帧显示点云
  9. nefuoj 9 喜洋洋
  10. Matlab:如何在图像标出特殊点(最大值/最小值)