Python之文件读写

本文介绍Python语言中的对于文件的读写等操作。(本文使用python3)

首先是对文件的操作流程

1.打开文件,得到文件句柄并赋值给一个变量

2.通过句柄对文件进行操作

3.关闭文件

对于文件的操作就离不开open()函数(这个函数是Python的io模块中的一个内建函数)。

首先建议使用help(open)查看下这个函数的基本信息(很多),部分结果如下:


可以看到这个函数的作用是打开一个文件并且返回一个数据流。在执行失败时会触发IOError。

基本用法如上所示,file是必须给出的,如果文件在当前工作目录,可以直接给出文件名即可;如果文件不在当前工作目录,还需要给出文件的路径。

打开模式(mode):


“r”为默认模式:只读模式,不能进行写等操作。

‘w’:只写模式,此时会进行“截断”操作,如果文件不存在则会创建,如果存在会覆盖掉原文件内容。

‘x’:类似于‘w’模式,不同的是在创建文件的时候会检查原文件是否存在,如果存在会引发一个FileExistsError错误。

‘a’:追加模式,文件不存在则创建,如果存在则在末尾追加内容。

‘b’:二进制模式,处理二进制文件。

‘t’:文件模式(默认)。

‘+’:打开一个位于磁盘上的文件,并且可以对这个文件进行读写操作。

‘U’:python不推荐使用的参数。

以上模式可以进行组合使用,例如‘rb’即为读二进制文件。

例如可以使用语句file1 = open(‘data’)打开文件,这时候只是获得了这个文件的句柄,并没有进行任何操作。

如果想打印文件内容可以利用print(file1.read())。

读写方法:F为文件句柄(或赋给的那个变量名)文件的

F.read([size]) #size为读取的长度,以byte为单位 。

F.readline([size]) #读一行,如果定义了size,有可能返回的只是一行的一部分 。

F.readlines([size]) #把文件每一行作为一个list的一个成员,并返回这个list。其实它的内部是通过循环调用readline()来实现的。

如果提供size参数,size是表示读取内容的总长,也就是说可能只读到文件的一部分。 

F.write(str) #把str写到文件中,write()并不会在str后加上一个换行符 。

F.writelines(seq) #把seq的内容全部写到文件中。这个函数也只是忠实地写入,不会在每行后面加上任何东西。 

F.close() #关闭文件。如果一个文件在关闭后还对其进行操作会产生ValueError 。

F.flush() #把缓冲区的内容写入硬盘 ,刷新。

F.fileno() #返回一个长整型的”文件标签“ 。

F.isatty() #文件是否是一个终端设备文件(unix系统中的)。

F.tell() #返回文件操作标记的当前位置,以文件的开头为原点 。返回值为距离原点的字符数。

F.next() #返回下一行,并将文件操作标记位移到下一行。文件是一个可迭代对象。 

下面举一些具体文件操作的例子:

1. 是打开一个文件并打印出来

# Author:Allen Liu
# Data: 07/27/2017
#11111打开文件并打印的三种方法。
file1 = open('data')#等价于 file1 = open('data','r'),获得了文件句柄
print(file1.read())#可以在括号中指定读取的字节数,用于将文件内容放到一个字符串变量中。
file1.close()
#
file2 = open('data','r')
for line in file2:
    print(line.strip('\n'))
file2.close()
#
file3 = open('data','r')
lines = file3.readlines()
for line in lines:
    print(line.strip('\n'))
file3.close()
为什么每次都要用open()重新获得文件句柄呢?因为对一个文件进行操作后,光标就不在原点了,这时候就不能得到光标前面的内容。

2. 向一个已经存在的文件中追加内容

先创建一个名为‘data’的文本文件,内容为:

Hello world!
I'm comming!
file1 = open('data','a+')
file1.write('I will be back!')
print(file1.read())
#这里是无法打印出文件内容的,因为是追加,光标已经在文档的结束位置。
file1.close()
还有就是追加的内容追加在原文档的最后一行。如果想在下一行记得在追加内容前面加\n。

3. 创建一个原来没有的文件,并写入内容。

file1 = open('data1','x')
file1.write('I will be back!')
最好用‘x’模式,因为直接用‘w’的话,可能会覆盖掉原有文件的内容,用‘x’则会先进行检查。

4. 在原有文件的指定位置写入内容。

file1 = open('data','r+')
#file1.tell()查看光标当前位置
file1.seek(10)#设置光标位置(以字符计算)
file1.write('I will be back!')
file1.close()
上边的方法虽然可以在指定位置写入内容,但是会覆盖掉后面的内容。不推荐使用。

在不改变文件内容的基础上的添加,作者会在后续文章中介绍。








评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值