小猿圈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学习的步伐,坚持就是胜利哦,加油~~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,311评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,339评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,671评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,252评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,253评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,031评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,340评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,973评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,466评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,937评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,039评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,701评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,254评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,259评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,485评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,497评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,786评论 2 345

推荐阅读更多精彩内容

  • 基于字符读写 最基本的文件操作当然就是在文件中读写数据。这也是很容易掌握的。现在打开一个文件以进行写操作: 1. ...
    IT小白1002阅读 1,015评论 0 1
  • 一、Python简介和环境搭建以及pip的安装 4课时实验课主要内容 【Python简介】: Python 是一个...
    _小老虎_阅读 5,720评论 0 10
  • mean to add the formatted="false" attribute?.[ 46% 47325/...
    ProZoom阅读 2,689评论 0 3
  • 蜀 国 鹃 都 项目概况 项目类型:大型生态休闲观光主题公园 项目规模: 总占地面积:4300亩 产业公园面积:3...
    寒光_7110阅读 270评论 0 0
  • 我是一朵花,一朵有了灵智的花,记得哪一世我为花你为僧,每日在你禅房边听那袅袅禅音让我明白了何为普度众生,何为善何...
    三生不弃阅读 286评论 0 0