课时2八:文件:因为懂你,所以一定

目录:

  一、张开文件

  2、文件对象的点子

  三、文件的关门

  四、文件的读取和固定

  5、文件的写入

  6、课时2八课后习题及答案

 

大好些个先后都依据着:输入->管理->输出的模子,首先接受输入数据,然后依据供给举行管理,最终输出结果。现在我们不再只满足使用input接受用户的输入,使用print输出管理的结果了。大家亟待消除想要关心到系统的一体,用代码自动分析种类的日记,分析的结果能够保存为一个新的日志,乃至能够跟外界的社会风气开始展览调换。

在编写程序的时候,操作系统为了更加快的做出响应,把具有当前的数量都献身内存中。但内部存款和储蓄器有个天然的紧缺,壹断点就没戏,emmmm。ctrl

  • s 学起,保存数据!

****************

1、展开文件

****************

在Python中,使用open()这几个函数来开垦文件并赶回文件对象:help(open)

open(file, mode=’r’, buffering=-1, encoding=None, errors=None,
newline=None, closefd=True, opener=None)

open()那个函数是有众多参数的,但作为初学者的我们,只供给先关怀首先个参数和第二个参数就能够。第叁个参数是传播的文件名,若是唯有文件名,不带路线的话,那么python会在时下文件夹中去找到该文件并开发。假设要开垦的公文不设有呢?那就要看第三个参数了,第一个参数钦命张开文件的方式:

打开模式      执行操作
'r'            以只读方式打开文件(默认)
'w'            以写入的方式打开文件,会覆盖已存在的文件
'x'            如果文件已经存在,使用此模式打开将引发异常
'a'            以写入模式打开,如果文件存在,则在末尾追加写入
'b'            以二进制模式打开文件
't'            以文本模式打开(默认)
'+'            可读写模式(可添加到其他模式中使用)
'U'            通用换行符支持

行使open成功张开三个文书后,它会自行重回3个文本对象,得到那些文件对象,就足以读取只怕修改那些文件:

>>> #先将record.txt文件放到Python的根目录下(如:C:\Python34)

>>> f = open("record.txt")

>>> 

从没音讯正是好音讯,表示咱们的文件被成功开采了。

***********************

贰、文件对象的主意

***********************

张开完文件并拿走文件对象之后,就足以选取文件对象的片段艺术对文件实行读取或退换等操作。如下表列举了有个别文本对象的方法:

文件对象方法                  执行操作
f.close()                      关闭文件
f.read([size=-1])           从文件读取size个字符,当未给定size或给定负值的时候,读取剩余的所有字符,然后作为字符串返回
f.readline([size=-1])        从文件中读取并返回一行(包括行结束符),如果有size有定义则返回size个字符
f.write(str)                   将字符串str写入文件
f.writelines(seq)           向文件写入字符串序列seq,seq应该是一个返回字符串的可迭代对象
f.seek(offset, from)          在文件中移动文件指针,从from(0代表文件起始位置,1代表当前位置,2代表文件末尾)偏移offset个字节
f.tell()                返回当前在文件中的位置
f.truncate([size=file.tell()])  截取文件到size个字节,默认是截取到文件指针当前位置

  

******************

叁、文件的破产

******************

close()方法用于关闭文件。Python具备垃圾回收机制,会在文书对象的引用计数降至零的时候自动关闭文件,所以在Python编制程序里,如若忘记关闭文件并不会形成内部存款和储蓄器泄露那么危险的结果。

但并不是说就能够不关门文件,假使您对文本举办了写入操作,那么应该在落成写入之后关闭文件。因为Python或然会缓存你写入的数目,要是中途发生类似断电之类的事故,那么缓存的数额根本就不会写入到内部存款和储蓄器中。所以,安全起见,要养成使用完文件后随即关闭的好习于旧贯。

**************************

肆、文件的读取和固定

**************************

文本的读取方法有为数不少种,能够动用文件对象的read()和readline()方法,也能够直接list(f)可能直接行使迭代来读取。read()是按字节为单位读取,如若不设置参数,那么会整整读收取来,文件的指针指向最后。tell()方法能够告知您目前文件指针的职位:

>>> f.read()

'小客服:小甲鱼,今天有客户问你有没有女朋友?\n小甲鱼:咦??\n小客服:我跟她说你有女朋友了!\n小甲鱼:。。。。。。\n小客服:她让你分手后考虑下她!然后我说:"您要买个优盘,我就帮您留意下~"\n小甲鱼:然后呢?\n小客服:她买了两个,说发一个货就好~\n小甲鱼:呃。。。。。。你真牛!\n小客服:那是,谁让我是鱼C最可爱小客服嘛~\n小甲鱼:下次有人想调戏你我不阻止~\n小客服:滚!!!\n================================================================================\n小客服:小甲鱼,有个好评很好笑哈。\n小甲鱼:哦?\n小客服:"有了小甲鱼,以后妈妈再也不用担心我的学习了~"\n小甲鱼:哈哈哈,我看到丫,我还发微博了呢~\n小客服:嗯嗯,我看了你的微博丫~\n小甲鱼:哟西~\n小客服:那个有条回复“左手拿著小甲魚,右手拿著打火機,哪裡不會點哪裡,so easy ^_^”\n小甲鱼:T_T\n================================================================================\n小客服:小甲鱼,今天一个会员想找你\n小甲鱼:哦?什么事?\n小客服:他说你一个学生月薪已经超过12k了!!\n小甲鱼:哪里的?\n小客服:上海的\n小甲鱼:那正常,哪家公司?\n小客服:他没说呀。\n小甲鱼:哦\n小客服:老大,为什么我工资那么低啊??是时候涨涨工资了!!\n小甲鱼:啊,你说什么?我在外边呢,这里好吵吖。。。。。。\n小客服:滚!!!'
>>> f.tell()

1129

刚才提到的文本指针是吗?能够感到它是四个”书签“,起到稳固的职能。使用seek()方法能够调动文件指针的位置。seek(offset,from)方法有四个参数,表示从from(0代表文件的起初地方,1表示当前岗位,贰表示文件末尾)偏移offset字节。因而将文件指针设置到开端地方,使用sek(0,0)就可以:

>>> f.tell()

1129
>>> f.seek(0,0)

0
>>> f.read(5)

'小客服:小'
>>> f.tell()

9

(注:因为1个华语字符占用二个字节的长空,所以四当中文加上3个英文冒号刚好到地点玖)

readline()方法用于在文件中读取壹整行,正是从文件指针的义务向后读取,直到遇见换行符(\n)结束:

>>> f.readline()

'甲鱼,今天有客户问你有没有女朋友?\n'

先前牵线过列表的有力,那不,也足以将全方位文件的内容放在列表中:

>>> list(f)

['小甲鱼:咦??\n', '小客服:我跟她说你有女朋友了!\n', '小甲鱼:。。。。。。\n', '小客服:她让你分手后考虑下她!然后我说:"您要买个优盘,我就帮您留意下~"\n', '小甲鱼:然后呢?\n', '小客服:她买了两个,说发一个货就好~\n', '小甲鱼:呃。。。。。。你真牛!\n', '小客服:那是,谁让我是鱼C最可爱小客服嘛~\n', '小甲鱼:下次有人想调戏你我不阻止~\n', '小客服:滚!!!\n', '================================================================================\n', '小客服:小甲鱼,有个好评很好笑哈。\n', '小甲鱼:哦?\n', '小客服:"有了小甲鱼,以后妈妈再也不用担心我的学习了~"\n', '小甲鱼:哈哈哈,我看到丫,我还发微博了呢~\n', '小客服:嗯嗯,我看了你的微博丫~\n', '小甲鱼:哟西~\n', '小客服:那个有条回复“左手拿著小甲魚,右手拿著打火機,哪裡不會點哪裡,so easy ^_^”\n', '小甲鱼:T_T\n', '================================================================================\n', '小客服:小甲鱼,今天一个会员想找你\n', '小甲鱼:哦?什么事?\n', '小客服:他说你一个学生月薪已经超过12k了!!\n', '小甲鱼:哪里的?\n', '小客服:上海的\n', '小甲鱼:那正常,哪家公司?\n', '小客服:他没说呀。\n', '小甲鱼:哦\n', '小客服:老大,为什么我工资那么低啊??是时候涨涨工资了!!\n', '小甲鱼:啊,你说什么?我在外边呢,这里好吵吖。。。。。。\n', '小客服:滚!!!']

对此迭代读取文本文件中的每壹行,只怕会这么写:

>>> f.seek(0,0)

0
>>> lines = list(f)

>>> for each_line in lines:
       print(each_line)

这么写没错,但是效用不高。因为文件对象自己是永葆迭代的,所以没须要绕圈子,直接运用for语句把内容迭代读收取来就能够:

>>> f.seek(0,0)

0
>>> for each_line in f:
        print(each_line)


小客服:小甲鱼,今天有客户问你有没有女朋友?

小甲鱼:咦??

小客服:我跟她说你有女朋友了!

小甲鱼:。。。。。。

小客服:她让你分手后考虑下她!然后我说:"您要买个优盘,我就帮您留意下~"

小甲鱼:然后呢?

小客服:她买了两个,说发一个货就好~

小甲鱼:呃。。。。。。你真牛!

小客服:那是,谁让我是鱼C最可爱小客服嘛~

小甲鱼:下次有人想调戏你我不阻止~

小客服:滚!!!

================================================================================

小客服:小甲鱼,有个好评很好笑哈。

小甲鱼:哦?

小客服:"有了小甲鱼,以后妈妈再也不用担心我的学习了~"

小甲鱼:哈哈哈,我看到丫,我还发微博了呢~

小客服:嗯嗯,我看了你的微博丫~

小甲鱼:哟西~

小客服:那个有条回复“左手拿著小甲魚,右手拿著打火機,哪裡不會點哪裡,so easy ^_^”

小甲鱼:T_T

================================================================================

小客服:小甲鱼,今天一个会员想找你

小甲鱼:哦?什么事?

小客服:他说你一个学生月薪已经超过12k了!!

小甲鱼:哪里的?

小客服:上海的

小甲鱼:那正常,哪家公司?

小客服:他没说呀。

小甲鱼:哦

小客服:老大,为什么我工资那么低啊??是时候涨涨工资了!!

小甲鱼:啊,你说什么?我在外边呢,这里好吵吖。。。。。。

小客服:滚!!!

 

******************

伍、文件的写入

******************

1经要写入文件,请保管在此以前的开发方式有‘w’或‘a’,否则会出错:

>>> f = open("record.txt")

>>> f.write("这是一段待写入的数据")

Traceback (most recent call last):
  File "<pyshell#31>", line 1, in <module>
    f.write("这是一段待写入的数据")
io.UnsupportedOperation: not writable
>>> f.close()

>>> f = open("record.txt","w")

>>> f.write("这是一段待写入的数据")

10
>>> f.close()

唯独,一定要留心的是:使用‘w’方式写入文件,以前的文书内容会被全数免除!!如下图:

图片 1

 

*******************************

陆、课时2八课后习题及答案

*******************************

图片 2

图片 3

图片 4

图片 5

图片 6

图片 7

图片 8

图片 9

 

相关文章