python基础教程学习笔记---(6)文件读写

1、open函数语法:

python通过open函数打开文件,建立程序与文件之间的连接。

open函数语法:open(filename[,mode[,buffering]])

其中filename是指要进行操作的文件名称,由文件名称和路径组成,需要加引号。

mode为操作模式参数,包括读、写、追加等。

buffering是缓冲参数,控制着文件的缓冲。当buffering=0或者False时,I/O就是无缓冲的,所有的读写操作都是直接针对硬盘的,如果是1或者True,I/O就是有缓冲的,python是用内存来代替硬盘,使得程序运行更快。大于1代表缓冲区的大小,单位为字节,-1或者其他任意负数代表使用默认的缓冲区大小。

只有filename参数是必须指定的,mode和buffering参数则是可选的,mode参数的缺省值为‘r‘。

2、参数mode的取值:

(1)基本取值:


r、w、a为打开文件的基本模式,分别表示只读、只写(覆盖写)、追加(追加写)。

b、t、+、U,与上面三个基本模式组合使用。

注意:文本模式用于打开文本文件,二进制模式用户打开二进制文件。

(2)常见的mode组合取值:

(3)举例说明:

现在window系统PC机硬盘上存在文件G:\file1.txt,对其进行演示操作。

①r模式:

报错的原因是路径中包含的‘\‘被识别为转义符,因此造成文件路径错误。

不能直接使用print打印对象f1的内容,需要使用read方法读取内容后,方能打印。

上面的open函数中虽然没有指定mode参数,但其实使用了mode的缺省值‘r‘。

效果一样,所以当只使用‘r‘参数时,可以省略。

另外,这里如果不想使用两个反斜杠,那么可以使用‘r+字符串’形式:

字符串前加r代表此字符串为原样显示,不转义。第一个‘r‘就是让字符串原样显示,第二个‘r‘是open模式。

②w模式:

由于只使用了‘w‘,因此程序对该文件只有写权限,没有读权限,因此使用read方法读时会报错。

完成这一步操作后,通过资源管理器去查看file1.txt的文件内容,如下,发现里面已被清空。

这是因为还没有断开程序与文件的连接,所以追加的内容尚未保存,因此需要使用close方法来关闭文件(即断开文件与程序的连接)。重新打开文件可以看到,文件已被新内容覆盖更新。

③a模式:

报错的原因是‘a‘模式只有写的权限,没有读的权限。

完成write操作后,但在关闭文件前,可以看到file1.txt文件并没有被更新。

关闭文件后,可以看到新内容被追加到文件末尾。

如果想换行追加,可以加上在字符串中加上换行符。

④r+模式:

‘r+‘模式是同时读写模式,但是必须指定写的位置,从指定的位置开始按字符逐个覆盖写。

从上面的两次写操作过程可以看出,第一次通过seek(0)指定从第一个字符开始覆盖写,第二次通过seek(5)从第6个字符开始覆盖写,没有被覆盖的字符继续保留。

如果不指定其实位置就开始进行写操作的话,就会报错,如下。

对于seek()方法的具体作用,在后面将会谈到。

⑤w+模式:

对于‘w+‘模式,其只是在‘w‘模式上添加了能读取文件对象的权限。

另外,从上面的例子中需要注意一点,一旦通过‘w+‘模式将一个文件指定给一个文件对象,那么这个文件就立即被清空,所以这里的f10.read()的结果是空串。也就是说,使用‘w‘或者‘w+‘模式,原文件的内容并不是在使用write方法时被覆盖掉,而是在授予写权限时就立即被清空。

⑥a+模式:

‘a+‘模式相对于‘a‘是增加了读文件的权限,但是从上例中可以看出,使用了read方法后,再进行write写操作就会报错,而不使用read方法直接进行write写操作是不会报错的,并且追加写成功。

 

3、常用的文件方法:

(1)基本介绍:

(2)举例说明:

现有文件:G:\file2.txt,文件内容如下:

read()方法是读取全部文件内全部数据内容,以字符串形式显示,对于文件中的换行符,在结果中以‘\n‘显式显示。读读取前,指针位于文件头(位置为0),读取全部后,指针位于文件末尾的下一位。返回文件位置用tell()方法,结果为长整型。

read(size)方式是指定读取字符串的字节数。最初指针放在文件开头,读取完毕后,移动至已读取字符串的下一位。

所以这里,使用read(5)读取了前5个字符,指针移动到第6个字符处,也就是编号为5L的位置。接着再使用read(7)读取的时候就从第6个字符开始读,以此类推。

使用readline()方法,逐行读取,每次读取一行,读取完毕后指针移到下一行开头。

readlines()方式是将读取的结果以列表形式存储,读取完毕后,指针移到文件末尾的下一位。原文件中的每一行是返回列表中的一个元素。

使用‘a‘模式进行追加写,打开文件后,指针仍指在文件头,通过write()方法写进字符串后,指针移到文件尾的下一位。

这个例子与上个例子的区别用于说明,当我们想在文件中追加写多行时,需要在追加的字符串中显式的写出换行符(\n)。

现有文件file3.txt,文件内容如下:

使用readlines()方法将读取文件的内容保存成列表。然后使用writelines()方法将该列表追加到另一个文件的末尾。每一个元素称为一行,由于起始位置为原文件的末尾下一位(并不是下一行),所以追加的第一行并没有单独成行,而是在原文件的最后一行的后面。

上例可以说明,writelines()方法接受列表,将列表每个元素作为一行写入文件中。

注意,因为有write()方法,所以python中是不存在writeline()方法的。

时间: 2024-10-18 23:23:14

python基础教程学习笔记---(6)文件读写的相关文章

<<Python基础教程>>学习笔记之|第01章|基础知识

本学习笔记主要用要记录下学习<<Python基础教程>>过程中的一些Key Point,或自己没怎么搞明白的内容,可能有点杂乱,但比较实用,查找起来也方便. 第01章:基础知识 ------ Jython:      Python的Java实现,运行在JVM中,相对稳定,但落后于Python,当前版本2.5,在TA(Python+Robot)会用到 IronPython:  Python的C#实现,运行在Common Language Runtime,速度比Python要快 >

&lt;&lt;Python基础教程&gt;&gt;学习笔记 | 第14章 | 网络编程

Python是个很强大的网络编程工具,原因有二: 1. Python内有很多针对常见网络协议的库 2. Python在处理字节流方面的优势 本章主要内容: 探讨Python标准库中的一些网络模块,探讨SocketServer类,最后是Twisted框架. ------ 相关模块 Socket模块 基本组件,用于两个程序之间的信息通道.套接字包括两个: 服务器套接字和客户端套接字.创建一个服务器套接字后,让它等待连接,这样它就在某个网络地址处监听.客户端套接字负责:简单的连接,完成事务,断开连接.

&lt;&lt;Python基础教程&gt;&gt;学习笔记 | 第11章 | 文件和素材

打开文件 open(name[mode[,buffing]) name: 是强制选项,模式和缓冲是可选的 #如果文件不在,会报下面错误: >>> f = open(r'D:\text.txt','r') Traceback (most recent call last): File "<stdin>", line 1, in <module> IOError: [Errno 2] No such file or directory: 'D:\\

&lt;&lt;Python基础教程&gt;&gt;学习笔记 | 第09章 | 魔法方法、属性和迭代器

这一章,有点抽象,看着有点蛋疼! 双下划线__future__或单下划线有特殊含义,在Python中,这些名字的集合称为魔法方法:最重要的是__init__和一些处理访问对象的方法,这些方法允许你创建自己的序列或者是映射. ------ 准备工作: 将__metaclass__=type放在模块的最开始位置,以确保类时最新式的.考虑下面两个类 class NewStyle(object): more_code_here class OldStyle: more_code_here 如果文件以__

&lt;&lt;Python基础教程&gt;&gt;学习笔记 | 第13章 | 数据库支持

备注:这章内容相对介绍的比较简单,不过例子比较使用,主要是要掌握如果连接,使用数据库,并以SQLite做示例 ------ Python数据库API 为了解决Python中各种数据库模块间的兼容问题,现在已经通过了一个标准的DB API.目前的API版本(2.0)定义在PEP249中的Python Database API Specification v2.0中. 异常 为了尽可能准确地处理错误,API中定义了一些异常.它们被定义在一种层次结构中,所以可以通过一个except块捕捉多种异常. 连

&lt;&lt;Python基础教程&gt;&gt;学习笔记 | 第10章 | 充电时刻

第10章 | 充电时刻 本章主要介绍模块及其工作机制 ------ 模块 >>> import math >>> math.sin(0) 0.0 模块是程序 一个简单的模块 #hello.py print ("Hello,World!") >>> import hello Traceback (most recent call last): File "<pyshell#56>", line 1, i

python基础教程学习笔记---(1)基础语法

1.两个整数相除,计算结果的小数部分被截除,结果仍然是一个整数: 如:1/2=0 2.整数和浮点数相除.或者浮点数之间相除,结果有小数部分,仍然是一个浮点数: 如:1/2.0=0.5  1.0/2=0.5  1.0/2.0=0.5  1/2.=0.5 3.双斜线(//)定义整除运算 如:1.0//2.0=0.0  1//2=0 4.%定义取余运算(求模运算) 如:10%3=1  2.75%0.5=0.25 5.**定义幂运算(乘方运算) 如:2**3=8  -3**2=-9 6.输入16进制表达

python基础教程学习笔记---(4)字典

序列是python中的一种数据结构,映射是另一种.映射(mapping)通过名字来引用值.python内建的唯一一种映射结构是字典.字典中的值没有特殊的顺序,但都存储在一个特定的键中.键可以是数字.字符串甚至数元组. 1.字典的使用: 序列通过索引来找到元素的取值. 字典通过键来获取它的值. 字段比列表在某些方面更加适用: ①游戏棋盘是用坐标值来组成的 ②文件是用文件名来确定的 ③数字电话,地址对应一个联系人 这些都不能通过索引来代替. 2.字典的创建: 字典是由键值对组成,一个键值对称为一项.

【学习笔记】Python基础教程学习笔记

教程视频网盘共享:http://pan.baidu.com/s/1hrTrR5E 03-python基础.if判断 print 输出数据 print("hahahah")------>hahahah a = 100 print(a)----->直接打印a的值 a = 18 print("我的年龄是%d岁"%a)------>我的年龄是18岁 age = 18 high = 178 print("我的年龄是%d岁,我的身高是%dcm&quo