小猿圈python入门之文件操作

Posted xiaoyuanquan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了小猿圈python入门之文件操作相关的知识,希望对你有一定的参考价值。

学习知识要善于思考,思考,再思(考)。我就是靠这个方法成为科学家的。——爱因斯坦

技术图片
 技术图片

 

open() 方法

Python open() 方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError。

注意:使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法。

open() 函数常用形式是接收两个参数:文件名(file)和模式(mode)。

一般用法:open(file,mode="r")

完整的语法格式:open(file, mode=‘r‘, buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

参数说明:

file:必须,文件路径(相对路径或者绝对路径)

mode:可选,文件的打开模式

buffering:缓冲

encoding:编码格式,一般使用utf8

errors:报错级别

newline:区别换行符

closefd:传入的file参数类型

mode常用的有:

r    以只读的方式打开文件,文件的指针将会放在文件的开头;这是默认模式。

w   打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。

a   打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。

r+   打开一个文件用于读写。文件指针将会放在文件的开头。

w+  打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。

a+   打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。

还有一个b的模式,是二进制模式,或者wb  rb  ab如果带有b,说明是和2进制相关。

默认为文本模式,如果要以二进制模式打开,加上 b 。

file对象

file对象使用open函数来创建,下面是file对象常用的函数

1、file.close()  关闭文件,关闭后文件不能再进行读写操作。

2、file.flush() 刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。

3、file.read() 从文件读取指定的字节数,如果未给定或为负则读取所有。

4、file.readline() 读取整行,包括“\\n字符”

5、file.readlines()  读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比 sizeint 较大, 因为需要填充缓冲区。

6、file.seek() 设置文件当前的位置。

7、file.tell()返回文件的当前位置

8、file.truncate([size])  从文件的首行首字符开始截断,截断文件为 size 个字符,无 size 表示从当前位置截断;截断之后后面的所有字符被删除,其中 Widnows 系统下的换行代表2个字符大小。

9、file.write()  将字符串写入文件,返回的是写入的字符长度。

10、file.writelines()  向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。

基于字符read 和 write

最基本的对文件的操作就是在文件中读写数据:

现在打开一个文件以进行写操作:

fileHandle = open ( ‘test.txt‘, ‘w‘ )

‘w‘是指文件将被写入数据,语句的其它部分很好理解。下一步就是将数据写入文件:

 fileHandle.write ( ‘This is a test file.\\nReally, it is.‘ )

这个语句将“This is a test.”写入文件的第一行,“Really, it is.”写入文件的第二行。最后,我们需要做清理工作,并且关闭文件:

 fileHandle.close()

正如你所见,在Python的面向对象机制下,这确实非常简单。需要注意的是,当你再次使用“w”方式在文件中写数据,所有原来的内容都会被删除。如果想保留原来的内容,可以使用“a”方式在文件中结尾附加数据:

fileHandle = open ( ‘test.txt‘, ‘a‘ ) 

fileHandle.write ( ‘\\n\\nBottom line.‘ ) 

fileHandle.close()

然后我们把写的内容读出来:

fileHandle = open ( ‘test.txt‘ ) 

print fileHandle.read() 

fileHandle.close()

基于行的读写 line:

fileHandle = open ( ‘test.txt‘ ) 

print fileHandle.readline() # "This is a test." 

fileHandle.close() 

同时,也可以把内容保存到一个list中:

fileHandle = open ( ‘test.txt‘ ) 

fileList = fileHandle.readlines() 

for fileLine in fileList: 

print ‘>>‘, fileLine 

fileHandle.close() 

或者在文件中一次读取几个字节的内容:

fileHandle = open ( ‘test.txt‘ ) 

print fileHandle.read ( 1 ) 

fileHandle.seek ( 4 ) 

print FileHandle.read ( 1 ) 

随机访问文件中的位置 seek

Python在读取一个文件时,会记住其在文件中的位置,如下所示:

fileHandle = open ( ‘test.txt‘ )

garbage = fileHandle.readline()

fileHandle.readline() # "Really, it is."fileHandle.close()

可以看到,只有第二行显示出来。然而,我们可以让Python从头开始读来解决这个问题:

fileHandle = open ( ‘test.txt‘ ) 

garbage = fileHandle.readline() 

fileHandle.seek ( 0 ) 

print fileHandle.readline() # "This is a test." 

fileHandle.close()

在上面这个例子中,我们让Python从文件第一个字节开始读取数据。所以,第一行文字显示了出来。当然,我们也可以获取Python在文件中的位置:

fileHandle = open ( ‘test.txt‘ ) 

print fileHandle.readline() # "This is a test." 

print fileHandle.tell() # "17" 

print fileHandle.readline() # "Really, it is."

二进制方式读写

在Windows和Macintosh环境下,有时可能需要以二进制方式读写文件,比如图片和可执行文件。此时,只要在打开文件的方式参数中增加一个“b”即可:

fileHandle = open ( ‘testBinary.txt‘, ‘wb‘ ) 

fileHandle.write ( ‘There is no spoon.‘ ) 

fileHandle.close()

python本身并没有对二进制进行支持,不过提供了一个模块来弥补,就是struct模块。

python没有二进制类型,但可以存储二进制类型的数据,就是用string字符串类型来存储二进制数据,这也没关系,因为string是以1个字节为单位的。

import struct

a=12.34

#将a变为二进制

bytes=struct.pack(‘i‘,a)

此时bytes就是一个string字符串,字符串按字节同a的二进制存储内容相同。

再进行反操作

现有二进制数据bytes,(其实就是字符串),将它反过来转换成python的数据类型:

a,=struct.unpack(‘i‘,bytes)

注意,unpack返回的是tuple

所以如果只有一个变量的话:

bytes=struct.pack(‘i‘,a)

那么,解码的时候需要这样

a,=struct.unpack(‘i‘,bytes) 或者 (a,)=struct.unpack(‘i‘,bytes)

如果直接用a=struct.unpack(‘i‘,bytes),那么 a=(12.34,) ,是一个tuple而不是原来的浮点数了。

如果是由多个数据构成的,可以这样:

a=‘hello‘

b=‘world!‘

c=2

d=45.123

bytes=struct.pack(‘5s6sif‘,a,b,c,d)

此时的bytes就是二进制形式的数据了,可以直接写入文件比如 binfile.write(bytes)

然后,当我们需要时可以再读出来,bytes=binfile.read()

再通过struct.unpack()解码成python变量

a,b,c,d=struct.unpack(‘5s6sif‘,bytes)

‘5s6sif‘这个叫做fmt,就是格式化字符串,由数字加字符构成,5s表示占5个字符的字符串,2i,表示2个整数等等,下面是可用的字符及类型,ctype表示可以与python中的类型一一对应。

小猿圈python入门文件操作就到这里,有不懂的同学们,可以留言哦,希望跟着python学习的步伐,坚持就是胜利哦,加油~~

以上是关于小猿圈python入门之文件操作的主要内容,如果未能解决你的问题,请参考以下文章

小猿圈Linux 之用户和用户组管理

小猿圈python之Django和Flask比较?

小猿圈python之python期末考试测试题(一)

小猿圈python之垃圾回收机制

小猿圈之解读Go语言的特点?

小猿圈之python实用的几款开发工具