python写入数据的一种措施_Python 文件数据读写的具体实现

文件数据读写

读写文件,本质上是请求操作系统打开一个文件对象,然后,通过操作系统提供的接口从这个文件对象中读取数据(读文件),或者把数据写入这个文件对象(写文件)。

文件读取

使用 Python 内置 open() 函数,以 rt 的模式读取文件,如下示例:

>>> f = open('some.txt', 'rt')

这行代码就表示打开一个文件,若是文件不存在,会抛出 IOError 的异常,并给出详细的信息提示:

>>> f = open('undefined.txt', 'rt')

Traceback (most recent call last):

File "", line 1, in

FileNotFoundError: [Errno 2] No such file or directory: 'undefined.txt'

当成功打开文件时,可使用 read() 函数读取文件的内容:

>>> f.read()

'Hello world!'

当数据读取完毕后,需要调用 close() 关闭文件。因为文件对象会占用资源,使用完毕后需要及时关闭释放资源。

>>> f.close()

还有一种方法就是使用 with 语句,给被使用的文件创建一个上下文环境,这样文件对象就能够自动关闭。

>>> with open('some.txt', 'rt') as f:

... data = f.read()

...

调用 read() 时一次性读取全部内容,若是文件内容过大,可以使用 read(size) 固定大小循环读取,每次最多读取 size 字节的内容。readline() 函数,每次读取一行内容,readlines() 读取所有内容,但是按行返回 list。三者的使用,可根据实际的需求进行选择。

二进制文件

读取二进制的文件,需要使用 rb 的模式打开:

>>> f = open('image.jpg', 'rb')

>>> f.read()

b'\xff\xd8\xff\xe0\x00\x10JFIF\x00...'

从文件中读取数据,需要注意编码的问题。当编码错误时,会抛出 UnicodeDecodeError 异常。比如:

>>> f = open('some.txt', 'rt', encoding='ascii')

>>> f.read()

Traceback (most recent call last):

File "", line 1, in

File "/usr/local/lib/python3.6/encodings/ascii.py", line 26, in decode

return codecs.ascii_decode(input, self.errors)[0]

UnicodeDecodeError: 'ascii' codec can't decode byte 0xcc in position 2: ordinal not in range(128)

这种情况下,通常为读取文本指定的编码不正确,需要确认文件编码是否正确。如果编码错误还是存在的话,可以给 open() 函数传递一个可选的 errors 参数来处理这些错误。比如:

>>> f = open('some.txt', 'rt', encoding='ascii', errors='replace')

>>> f.read()

'Un��ic��o��de��'

>>> f = open('some.txt', 'rt', encoding='ascii', errors='ignore')

>>> f.read()

'Unicode'

使用参数 errors 能够处理编码错误的问题,但是过程会觉得非常糟糕。这里提倡的是确保使用的是正确的编码。模棱两可的时候,使用默认的设置(通常是 UTF-8)。

压缩文件

读取 gzip 和 bz2 格式的压缩文件时,可以使用 gzip 和 bz2 模块。两个模块都为 open() 提供了另外的实现来解决读取 gzip 和 bz2 两个格式的压缩文件的问题。例如读取压缩文件,示例如下:

>>> import gzip

>>> with gzip.open('some.gz', 'rt') as f:

... text=f.read()

>>> import bz2

>>> with bz2.open('some.bz2', 'rt') as f:

... text=f.read()

文件写入

文件写入,同样需要调用 open() 参数,但是指定的模式为 wt 或者 wb,用以表示写文本文件或是二进制文件:

>>> f = open('some.txt', 'wt')

>>> f.write('Hello, world!')

13

>>> f.close()

数据写入完毕,同样需要调用 close() 关闭文件对象。也可以 with 语句创建上下文,用以正常关闭文件对象。

类似的,写入压缩数据时,导入 gzip 或者 bz2 模块:

>>> import gzip

>>> with gzip.open('some.gz', 'wt') as f:

... f.write(text)

>>> import bz2

>>> with bz2.open('some.bz2', 'wt') as f:

... f.write(text)

写入压缩数据时,可选参数 compresslevel 可以指定一个压缩等级。例如:

>>> with gzip.open('some.gz', 'wt', compresslevel=6) as f:

... f.write(text)

compresslevel 参数默认值为 9,表示最高的压缩等级。等级越低性能越好,但是压缩程度也就越低。

使用 w 模式的 open() 函数,若打开的文件在写入前有数据内容,则会被清除覆盖。如果是要在已经存在的文件中添加内容的话,使用模式为 at 的 open() 函数。

涉及读写文件模式的定义及含义,内容如下:

模式

含义

'r'

读取数据(默认)

'w'

写入数据

'x'

文件存在抛出异常,不存在则创建

'a'

追加写入数据

'b'

二进制模式

't'

文本模式(默认)

'+'

更新文件(读写)

具体更详细的内容可以参考 Python 官方文档。

参考资料

来源

David M. Beazley;Brian K. Jones.Python Cookbook, 3rd Edtioni.O'Reilly Media.2013.

Luciano Ramalho.Fluent Python.O'Reilly Media.2015.

“2. Built-in Functions”.docs.python.org.Retrieved 20 January 2020.

"gzip — Support for gzip files".docs.python.org.Retrieved 22 January 2020.

"bz2 — Support for bzip2 compression".docs.python.org.Retrieved 22 January 2020.

廖雪峰.“Python 教程”.liaoxuefeng.com.[2020-01-18].

以上为本篇的主要内容。希望对大家的学习有所帮助,也希望大家多多支持python博客。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/351923.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MATLAB的dir函数

1、作用获得指定文件夹下的所有子文件夹和文件,并存放在在一种文件结构体数组中. 2.使用方法dir(.)列出当前目录下所有子文件夹和文件dir(G:\Matlab)列出指定目录下所有子文件夹和文件dir(G:\Matlab\*.jpg)列出当前目录下符合正则表达式的文件夹和文件3.例如:列出文…

libevent简介和使用

libevent是一个基于事件触发的网络库,memcached底层也是使用libevent库,今天学习下。总体来说,libevent有下面一些特点和优势:* 统一数据源, 统一I/O事件,信号和定时器这三种事件;* 可移植&…

qr码生成_从Java程序生成QR码图像

qr码生成如果您精通技术和小工具,则必须了解QR码。 这些天,到处都可以找到它-在博客,网站,甚至在某些公共场所。 这在移动应用程序中非常流行,在移动应用程序中,您可以使用QR Code扫描仪应用程序扫描QR Cod…

jracdrive变频器说明书580_jracdrive变频器err02

A:高性能密封型变频器-防粉尘、防水、防油污、防腐蚀此款高性能变频器,因为其具有防粉尘、防水、防油污、防腐蚀性能,适用于化工厂、印染厂、化纤厂、纺织厂、输送带、机床、水泥厂、制*厂、食品厂等环境恶劣的场合。变频器硬件特点&#xff…

Harris角点检测+sift描述匹配

最近用到:Harris检测图像中边缘处的特征点,并且需要两张图特征点匹配起来。Harris只是一个角点检测的算法,最终只得到特征点坐标,想要匹配需要描述,而Harris是单尺度的,自己写描述函数又有些麻烦。找到MATL…

python辅助脚本教程_微信跳一跳python辅助脚本实例分享

本文主要为大家整理了关于微信跳一跳的辅助脚本内容,这次我们给大家整理的是关于python的脚本内容,一起来学习下。这段时间微信跳一跳这个游戏非常火爆,但是上分又非常的难,对于程序员来说第一个念头就是通过写一个辅助脚本外挂让…

Bug解决方案

一:百度错误代码或者关键字搜索 二:在博客论坛招贴问人 三:向同事或者公司老人请教 四:程序的每个字母逻辑浏览一遍 五:重启电脑 六:环境软件重装 七:回去睡一觉,等待明天早上再看 八…

非Java专家的APM:什么泄漏?

通过AppDynamics解决应用程序问题的速度提高了10倍–以最小的开销在代码级深度监视生产应用程序。 开始免费试用! 内存,内存,内存... 内存是Java的关键部分,尤其是内存管理。 作为开发人员,内存管理不是您要定期执行…

总结libevent安装方法

1.先用:ls -al /usr/lib | grep libevent 查看是否已安装,如果已安装且版本低于1.3,则先通过:rpm -e libevent —nodeps 进行卸载。 2.下载libevent安装包:libevent-1.4.13-stable.tar.gz,然后解压。 3.切…

opencv中匹配点对的坐标提取

在opencv中&#xff0c;特征检测、描述、匹配都有集成的函数。vector<DMatch> bestMatches;用来存储得到的匹配点对。那么如何提取出其中的坐标呢&#xff1f; int index1, index2;for (int i 0; i < bestMatches.size(); i)//将匹配的特征点坐标赋给point{index1 b…

echarts 弹出放大_Echarts图标增加全屏/放大功能

需求描述&#xff1a;客户爸爸在看某个echarts图表时&#xff0c;图标的数据很多&#xff0c;字看着很小&#xff0c;客户爸爸希望能双击放大某个图表。如下面这个图表字太小&#xff0c;太密。image.png解决方式&#xff1a;网上有不少方式是用Echarts的tool工具先上自定义工具…

Hdoj 1847.Good Luck in CET-4 Everybody! 题解

Problem Description 大学英语四级考试就要来临了&#xff0c;你是不是在紧张的复习&#xff1f;也许紧张得连短学期的ACM都没工夫练习了&#xff0c;反正我知道的Kiki和Cici都是如此。当然&#xff0c;作为在考场浸润了十几载的当代大学生&#xff0c;Kiki和Cici更懂得考前的放…

mexw32与mexw64

关于mex文件 MATLAB的mex文件是一种特征的函数封装形式&#xff0c;这类函数一般由C/C语言编写的&#xff0c;经过MATLAB编译器处理而生成的二进制文件。它可以被MATLAB解释器自动装载并执行的动态链接程序&#xff0c;类似于windows下的dll文件。在使用的时候也可以像普通的.m…

对外汉语语料库有哪些_国内语料库建设一览表

英语学习者语料库(书面语及口语)中国学习者语料库 CLEC(100万)广外、上海交大大学英语学习者口语语料库 COLSEC (5万) 上海交大香港科技大学学习者语料库 HKUST Learner Corpus 香港科技大学中国英语专业语料库 CEME (148万) 南京大学中国英语学习者口语语料库 SECCL (100万) 南…

数据库设计(一对一、一对多、多对多)

关联映射&#xff1a;一对多/多对一 存在最普遍的映射关系&#xff0c;简单来讲就如球员与球队的关系&#xff1b; 一对多&#xff1a;从球队角度来说一个球队拥有多个球员 即为一对多 多对一&#xff1a;从球员角度来说多个球员属于一个球队 即为多对一数据表间一对多关系如下…

oozie与hue整合 执行WC案例报错: 连接10020端口被拒绝

Call From hdp-05/192.168.230.15 to hdp-01:10020 failed on connection exception: java.net.ConnectException: 拒绝连接; For more details see: http://wiki.apache.org/hadoop/ConnectionRefused错误原因没有启动hadoop的history程序JobHistoryServer进程监听端口就是10…

matlab无法读取xls

我首先从C中导出了xls格式的excel表格&#xff0c;又用MATLAB读取时&#xff0c;遇到下面的问题&#xff1a; Error using xlsread (line 251) File E:\matlab_pagram\myGMS\right.xls not in Microsoft Excel Format. 我的读取函数是&#xff1a;labels_right xlsread(righ…

Valhalla项目的价值

我对Valhalla项目的进度一直很感兴趣&#xff0c;但是Brian Goetz最近的信息“ Valhalla项目&#xff1a;目标 ”提高了我的兴趣。 我经常喜欢Goetz的作品&#xff0c;因为他结合了我最想成为技术作者的两个特征&#xff1a;他比他所写的内容更了解他所写的主题&#xff0c;而且…

python里clear和copy_python之字典

通过名字引用值得数据结构.这种结构类型称为映射.字典是python中唯一内建的映射类型.字典中的值并没有特殊的顺序,但是都存储在一个特定的键里.键可以是数字,字符串甚至是元组.某些情况下,字典比列表更加适用:1.表征游戏棋盘的状态,每个键都是由坐标值组成的元组;2.存储文件修改…

实用类-会员信息

录入会员生日&#xff0c;形式必须是“月/日”&#xff0c;如“09/12”&#xff1b;录入的密码必须在6-10位之间&#xff1b;允许用户重复输入&#xff0c;直到输入正确为止。 1 package demo3;2 3 import java.util.Scanner;4 5 public class Test8 {6 public static void…