文件的基本操作(二)

文件的关闭

1.close( )方法

close方法是文件对象的内置方法,使用colse( )方法关闭已打开的文件,语法格式如下:

变量名.close( )

其中变量名为文件句柄

2.with语句:

当打开与关闭之间的操作较多时,很容易遗漏文件关闭操作,为此Python引入with语句预定义清理操作、实现文件的自动关闭。

语法格式如下:

with open(文件名)as 简称:  #其中的简称用于接受witn语句打开的文件对象

  pass

程序中无需再调用close( )方法关闭文件,文件对象使用完毕之后,with语句会自动关闭文件。

示例代码如下:

with open('rgf.txt',mode='r',encoding="utf-8")as f:
 print(f.readlines())

运行界面如下:

虽然程序执行完毕后,系统会自动关闭由该程序打开的文件,但计算机中可打开的文件数量是有限的,每打开一个文件,可打开文件数量就减1;打开的文件占用系统资源,若打开的文件过多,会降低系统性能;当文件以缓冲方式打开时,磁盘文件与内存间的读写并非即时的,若程序因异常关闭,可能产生数据丢失。因此,在编写代码时应在程序中主动关闭不再使用的文件。

文件内容读取的方法:(.read,.readline和.readlines)

1.<f>.read(size=-1) 读入全部内容,如果给出参数,读入前size长度

以上格式中的参数size用于设置读取数据的字节数,若未提供或设置为-1,则一次读取并返回文件中的所有数据。

代码示例一如下:

with open('rgf.txt',mode='r',encoding="utf-8")as f:
 print(f.read(2))

运行界面如下:

代码示例二如下:

with open('f',mode='r',encoding="utf-8")as f:
 print(f.read(2))
 print(f.read())

运行界面如下:

通过以上示例可知,我们在进行第二次读取的输出结果为在第一次读取的基础上继续读取的。而不是从头到尾全部读取。之所以出现上述情况,是因为在文件的一次打开与关闭之间进行的读写操作是连续的,程序总是从上次读写的位置继续向下进行读写操作。

2.<f>.readline(size=-1) 读入一行内容,如果给出参数,读入前size长度

代码示例如下:

with open('rgf.txt',mode='r',encoding="utf-8")as f:
 print(f.readline())

运行界面如下: 

3.<f>.readlines(size=hint) 读入文件所有行,以每行为一个元素形成列表,如果给出参数,读入前hint行。

以上格式中,参数size的单位为字节,它用于控制要读取的行数,如果行中数据的总大小超出了hint字节,readlines()不会读取更多的行。

代码示例如下:

with open('rgf.txt',mode='r',encoding="utf-8")as f:
 print(f.readlines())

运行界面如下:

以上这三种方法中,read()和readlines()方法都可一次读取文件中的全部数据,但因为计算机的内存是有限的,若文件较大,read()和readlines()的一次读取便会耗尽系统内存,所以这2种操作都不够安全,为了保证读取安全,通常多次调用read()方法,每次读取n字节的数据。

 文件的全文本操作:

1.遍历全文本:方法一

代码示例如下:

fname=input("请输入要打开的文件名称:")
fo=open(fname,"r",encoding="utf-8")
txt=fo.read()  #一次读入,统一处理,对全文txt进行处理。
print(txt)
fo.close()

运行界面如下:

通过以上代码可知,我们首先将用户在提醒之下输入的文件赋值给fname,之后我们对该文件进行处理,即进行读取,读取之后的文件赋值给fo,之后采用read文件进行读入,read为读入全部内容。将所读入的全部内容赋值给txt,进行输出,最后关闭文件即可。

遍历全文本:方法二  (按数量读入逐步处理的办法)对于处理大文件,这种思路更加可行有效。

代码示例如下:

fname=input("请输入要打开的文件名称:")
fo=open(fname,"r",encoding="utf-8")
txt=fo.read(2)
print(txt)
while txt!="":
    txt=fo.read(2)
print(txt,"完成")
fo.close()

运行界面如下:

 通过以上代码可知,我们首先将用户在提醒之下输入的文件赋值给fname,之后我们对该文件进行处理,即进行读取,读取之后的文件赋值给fo,之后采用read文件进行读入,read(2)为读入前面两个字节,此时对读入的文件进行输出的时候,我们看到结果为沃尔两字,即文件的前面两个字。之后采用while循环进行以两个字节进行输入,当文件不为空的时候继续以两个字节进行对文件进行读取,知道文件全部读取之后,此时我们再进行输出的时候,可以看到,此时的文件为空,说明已经全部读入。最后关闭文件即可。

对于分行存储的文件,采用逐行遍历的方法最为常见。

方法一:将所有文件的行一次性的读入内存,并且逐一的遍历这些行,并且对每行进行处理。

示例代码如下:

fname=input("请输入要打开的文件名称:")
fo=open(fname,"r",encoding="utf-8")
for line in fo.readlines():
    print(line)
fo.close()

运行界面如下:

方法二: 将所有文件的行逐一的读入内存。(并且分行读入,逐行处理)

示例代码如下:

fname=input("请输入要打开的文件名称:")
fo=open(fname,"r",encoding="utf-8")
for line in fo:
  print(line)
fo.close()

运行界面如下:

数据的文件写入的方法:

1.<f>.write(s)  向文件写入一个字符串或字节流

其中的s为将要写入文件的文本文件:字符串

打开的句柄为f.write

以上格式中的参数s表示要写入文件的数据,若数据写入成功,write()方法会返回本次写入文件的数据的字节数。

在打开要写入的文件的时候,我们要将打开模式创建为w(覆盖写模式)、a+(追加写模式)即打开模式为可以写入的模式。

代码格式如下:

with open('rgf.txt',mode='a+',encoding="utf-8")as f:
 a=f.write("沃尔带队拿下了总冠军")
print(a)

运行界面如下:

 2.1.<f>.writelines(lines)  将一个元素全为字符串的列表写入文件

以上格式中的参数lines表示要写入文件中的数据,该参数可以是一个字符串或字符串列表。需要说明的是,若写入文件的数据在文件中需要换行,应显式指定换行符。

代码示例如下:

with open('rgf.txt',mode='w',encoding="utf-8")as f:
 a=f.writelines(["沃尔带队拿下了总冠军","\n","奇才","比尔"])
print(a)

运行界面如下所示: 

运行代码后,若没有输出信息,说明字符串被成功的写入文件。此时打开文件,可以看到如下所示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一直再追梦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值