python创建文件对象_python基础教程:文件读写

在Linux系统中,一切都是文件。但我们通常说的文件是保存在磁盘上的图片、文档、数据、程序等等。而在程序的IO操作中,很多时候就是从磁盘读写文件。本节我们讲解Python中的文件对象如何操作文件。

1460000019217705

创建文件对象

通过Python内置函数open()可以很容易的创建一个文件对象。open函数有很多参数,最常用的有两个,使用open函数最常用的方法是:open(filename, mode)。

f = open('myfile', 'w')

第一个参数filename是文件名的字符串,比如myfile。第二个参数也是一个字符串,表示文件使用方式。mode的可选项如下:

mode

含义

‘r’

以只读模式打开(默认)

‘w’

以可写模式打开,并清楚文件内容(如果文件存在的话)

‘x’

创建一个新文件并以可写模式打开

‘a’

以可写模式打开,从文件末尾开始写入(如果文件存在的话)

‘b’

二进制模式

‘t’

文本模式(默认)

’+’

打开一个已存在文件以便进行更新(读和写)

其中的'b'和't'是指定文件内容是文本还是二进制,其它都说是关于读写方式的。

'b'是二进制模式打开文件,读写的数据都是字节对象(bytes),这个模式可以读写一切文件,包括文本文件,但读写文本文件时要注意编码的问题。

't'是文本模式下读写文件。读取时,默认会把平台特定的行结束符 (Unix 上的\n, Windows 上的 \r\n)转换为\n。写入是,默认会把出现的\n 转换回平台特定的结束符。这种默认的“幕后修改”对文本文件来说没有问题,但会破坏二进制数据(比如,JPEG或exe)文件中的数据。

在使用open创建文件对象时,最好使用 with 关键字。其好处是,当字句体结束后文件会正确关闭,即使在某个时刻引发了异常。并且with比等效的try-finally代码块更简短:

In [102]: with open('myfile') as f:

...: data = f.read()

...:

In [103]: f.closed

Out[103]: True

如果没使用with关键字,就要调用f.close()来关闭文件并立即释放它使用的系统资源。如果没有显示的关闭文件,Python的垃圾回收器最终将销毁该对象并为你关闭打开的文件,但这个文件可能会保持打开状态一段时间。另外一个风险是不同的Python实现会在不同的时间进行清理。

通过 with 语句或者调用 f.close() 关闭文件对象后,尝试使用该文件对象将自动失败。

文件对象的方法

通过上面的方法创建文件对象f后,,我们就可以通过其对应的方法读写数据了。

(1)写内容到文件:f.write(string)

把内容写入文件的方法是write()方法,传递的对象必须是字符串(文本模式下)或字节对象(二进制模式下)。如果要写入其它类型的对象(比如,字典、列表等等),就要先把它们转换成字符串(文本模式下)或字节对象(二进制模式下)。

In [109]: f = open('myfile', 'w')

In [110]: f.write('认真学Python,就是文件的全部内容。\n')

Out[110]: 21

In [111]: f.close()

(2)读取文件内容:f.read(size)

它会读取文件里面的数据并将其返回为字符串(在文本模式下),或者字节对象(二进制模式)。参数size是一个可选的整数参数,当size被省略或为负的时候,读取文件的全部内容;如果文件的大小是机器内存的两倍或更大,那么可能出现错误。读取并返回的size大小的内容。如果已经读完全部内容(到达文件末尾),将返回一个空字符串。

In [112]: f = open('myfile')

In [113]: f.read()

Out[113]: '认真学Python,就是文件的全部内容。\n'

In [114]: f.read()

Out[114]: ''

f.readline() 从文件读取一行,换行符\n留住字符串末尾;

f.readlines() 读取文件所有行,返回一个字符串的列表;

In [118]: f.readline()

Out[118]: '认真学Python,就是文件的全部内容。\n'

In [119]: f.seek(0)

Out[119]: 0

In [120]: f.readlines()

Out[120]: ['认真学Python,就是文件的全部内容。\n']

遍历文件的所有行,也可以用遍历文件对象的方式,这是内存高效、快速并简单的方式:

In [122]: for line in f:

...: print(line)

...:

认真学Python,就是文件的全部内容。

(3)文件对象的位置

前面的例子中,我们已经读到文件的末尾,如果要再从头读的话就要调用f.seek(0)来设置文件对象的位置到文件开头。这个方法有两个参数:f.seek(cookie, whence=0)

cookie 是位置偏移量

whence 是相对位置,它有三种相对位置:

0 文件开头,偏移量是0或整数;

1 当前位置,偏移量可以是负数;

2 文件末尾,偏移量通常是负数;

如何查看当前位置呢?调用f.tell()方法。

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

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

相关文章

(转)springboot:添加JSP支持

转自: 14.springboot:添加JSP支持 - 简书(1)创建Maven web project 使用Eclipse新建一个Maven Web Project ,项目取名为:spring-boot-jsp (2)在pom.xm...https://www.jianshu.com/p/4216bbd1e0…

leetcode初级算法5.加一

leetcode初级算法5.加一 仅为个人刷题记录,不提供解题思路 题解与收获 我的解法:(总结在代码中) public int[] plusOne(int[] digits) {//获取digits长度int length digits.length;//判断条件int count 0;//全是9的情况for …

epoll 浅析以及 nio 中的 Selector

转载自 epoll 浅析以及 nio 中的 Selector首先介绍下epoll的基本原理,网上有很多版本,这里选择一个个人觉得相对清晰的讲解(详情见reference):首先我们来定义流的概念,一个流可以是文件,socket&…

转-SpringBoot——使用外置的Tomcat服务器

转自: SpringBoot——使用外置的Tomcat服务器_架构师的小跟班的博客-CSDN博客_springboot使用外置tomcat1 前言2 修改步骤2.1 修改打包方式(jar -> war)2.2 排除 SprignBoot的Web模块中的Tomcat依赖2.2.1 将嵌入的Tomcat依赖方式改成 pro…

leetcode初级算法6.字符串转整数(atoi)

leetcode初级算法6.字符串转整数(atoi) 仅为个人刷题记录,不提供解题思路 题解与收获 我的解法: public int myAtoi(String s) {//避免魔法值先设spaceString space " ";//如果是空或者是一串空字符串就滚回去!if(s null || …

inner join on 加条件和where加条件_SQL学习笔记 - GROUP BY / JOIN / UNION

最近在DataCamp上学习SQL(基于PostgreSQL)的课程,本文主要记录自己易记混的点,以便日后参考学习,不做原理讲解。GROUP BY(分组)一般和聚合函数一起使用,包括COUNT(),AVG(…

Selector 实现原理

转载自 Selector 实现原理概述 Selector是NIO中实现I/O多路复用的关键类。Selector实现了通过一个线程管理多个Channel,从而管理多个网络连接的目的。 Channel代表这一个网络连接通道,我们可以将Channel注册到Selector中以实现Selector对其的管理。一个C…

转: 深入浅出-网络七层模型

转自 深入浅出-网络七层模型 - sunsky303 - 博客园引言 今天回顾一下--网络七层模型&&网络数据包 网络基本概念 OSI模型 OSI 模型(Open System Interconnection model)是一个由国际标准化组织&#https://www.cnblogs.com/sunsky3…

date转timestamp格式_技术分享 | MySQL:timestamp 时区转换导致 CPU %sys 高的问题

作者:高鹏文章末尾有他著作的《深入理解 MySQL 主从原理 32 讲》,深入透彻理解 MySQL 主从,GTID 相关技术知识。本文为学习记录,可能有误请谅解。本文建议PC端观看,效果更佳。这个问题是一个朋友遇到的风云&#xff0c…

2021年最新springcloud配置中心不生效的版本原因

想直接看结论请到最下面,中间是我的纠错细节 实名吐槽一波cloudAlibaba文档。 github上的官方文档明明白白写着: 2.2.X版本适用于Springboot 2.2.X 彳亍! 于是我将原本的2.6.0版本改成了SpringBoot 2.2.4Release,然后启动报错&a…

python爬新闻并保存csv_用python爬取内容怎么存入 csv 文件中

小白一个,爬取豆瓣电影250作为练习,想把爬取的内容用csv存储,想存但是不知道怎么自己原来代码拼接在一起。 ps:非伸手党,查阅了官方文档,也做了csv读写的练习,就是拼不到一起,不知道该怎么改。求…

idea部署springboot项目到外部tomcat

【README】 本文旨在记录idea部署springboot项目到外部tomcat的步骤; 第一次部署会踩很多坑儿,多查google,多重试; 第一次部署,不建议手动录入依赖,因为有可能遗漏;而且网络上资料很多但也很…

生成configDataContextRefres失败:Error creating bean with name ‘configDataContextRefresher‘

被这个问题折磨了很久,本人解决方法如下,奉劝一句,该看的官方文档还是要看,但是千万别傻傻地照做! 首先编写bootstrap.properties,往里写入: 这些基础配置 然后检查自己是否引入了这个依赖&am…

python怎么用for循环找出最大值_用for循环语句写一个在输入的十个数字中求最大和最小值的python程序应该怎么写?...

“在输入的十个数字中求最大和最小值的 python 代码”这个需求,在不同时间来看,解题思路不同,所需要的 python 知识点不同。 作为萌新的我,为此特意整理了 3 种解法,以及相应的知识点笔记。 解法A:不使用列…

(转)mysql查看连接客户端ip和杀死进程

转自: mysql : show processlist 详解 - _小豪豪 - 博客园最近排查一些MySQL的问题,会经常用到 show processlist,所以在这里把这个命令总结一下,做个备忘,以备不时只需。 首先是几条常用的SQL。 1、按客户…

Java NIO学习笔记之图解ByteBuffer

转载自 Java NIO学习笔记之图解ByteBuffer ByteBuffer前前后后看过好几次了,实际使用也用了一些,总觉得条理不够清晰。 《程序员的思维修炼》一本书讲过,主动学习,要比单纯看资料效果来的好,所以干脆写个详细点的文章来…

小小涉及OpenFeign原理:Could not extract response: no suitable HttpMessageConverter found for response type

一、问题解释(想看总结的去最下面) org.springframework.web.client.UnknownContentTypeException: Could not extract response: no suitable HttpMessageConverter found for response type [class XXX] and content type [XXX;XXX]凡是报这个错误&am…

apache shiro怎么升级_Springboot整合Shiro之授权

第二条为推广文章,阅读一次0.3kuai,收入用于网站服务器及资源索取。Shiro是我们常用的一个权限管理框架,本文的重点是来介绍下在SpringBoot环境下我们怎么来使用Shiro。一、添加相关依赖本案例中我们使用SpringDataJPA和Thymeleaf来配合讲解&…

转: 虚拟IP(VIP)原理

转自: 虚拟IP(VIP)原理_海阔天空sky的博客-CSDN博客_vip 虚拟ip原理高可用性HA(High Availability)指的是通过尽量缩短因日常维护操作(计划)和突发的系统崩溃(非计划)所…

NIO学习–缓冲区

转载自 NIO学习–缓冲区Buffer其实就是是一个容器对象,它包含一些要写入或者刚读出的数据。在NIO中加入Buffer对象,体现了新库与原I/O的一个重要区别。在面向流的I/O中,您将数据直接写入或者将数据直接读到Stream对象中。 在NIO库中&#xff…