每天10分钟,带你一周精通Python:第8章处理文件

每天10分钟,带你一周精通Python:第8章处理文件

太酷了!我们已经学到了本专栏中项目前的最后一章。在本章中,我们将坐习如何处理外部的文件。

在前面的第5章中,我们学会了如何使用input()函数得到用户的输入。而在有些情况下,让用户在我们的程序中输入数据可能不太现实,尤其是当我们的程序需要处理大量数据的情况下。这时,更加方便的方式是把需要的信息先保存到一个外部的文件中,并让我们的程序从这个文件中读取信息。在本章中,我们将要学习如何这么做。准备好了么?

8.1打开并读取文本文件

我们将要读取的第一种类型的文件是一个简单的有多行文字的文本文件。为了这么做,让我们首先创建一个包含了下列几行文本的文件。

Learn Python in One Day and Learn It Well
Python for Beginners with Hands-on Project
The only book you need to start coding in Python
immediately
http://www.learncodingfast.com/python

把这个文本文件保存为myfile.txt,并保存到桌面上。接下来,打开IDLE并输入下面的代码。把这段代码保存为fileOperation.py,也放到桌面上。

f=open ('myfile.txt','r')
firstline = f.readline()
secondline = f.readline()
print (firstline)
print (secondline)

f.close()

代码中的第一行打开了文件。在能够从文件中读取信息之前,我们需要打开文件(就像你需要打开kindle设备或者应用上的电子书才能读取信息一样)。 Open函数的作用就是这样,它需要两个参数。

  • 第一个参数是文件的路径。如果你没有把fileOperation.py和myfile.txt放在同一个目录下(在本例中都放在桌面上),你就需要把“myfile.txt”替换为真实保存文本文件的路径。比如,如果你把它保存在一个位于C盘,名叫“PythonFiles”的文件夹中,你就需要写成“C:\PythonFiles\myfile.txt”(需要是双反斜杠)。

  • 第二个参数是模式。它指定了文件使用什么方式打开。最常见的模式是:

  • r模式: 仅仅只读。

  • w模式: 仅仅只写。
    如果指定的文件不存在,它将会被创建。
    如果指定的文件存在,文件中任何已有的数据都将被擦除。

  • a模式: 用于添加。
    如果指定的文件不存在,它将会被创建。
    如果指定的文件存在,任何写入文件的数据将会自动添加到文件的末尾。

  • r+模式: 用于读写。

在打开文件后,下一条语句firstline=f.readline()从文件中读取第一行,并把它分配给变量firstline。

每次调用readline()函数,它都会从文件中读取新的一行。在我们的程序中,readline()调用了两次。因此前两行信息就会被读取。当你运行这个程序时,你将会得到下面的输出。

Learn Python in One Day and Learn It Well

Python for Beginners with Hands-on Project

你将会发现每行后面都插入了一个换行符。这是因为readline()函数在每行的末尾添加了“\n”字符。如果你不想在每行文字间输出额外的那一行,你可以这么做print(firstline,end=’ ')。这将会删除“\n”字符。在读取和打印前两行后,最后的语句f.close()将会把文件关闭。一旦完成了文件的读取,你总是需要把文件关闭,以释放对应的系统资源。

8.2使用For循环来读取文本文件

除了使用上面的readline()方法来读取文本文件外,也可以使用for循环。事实上,for循环是读取文本文件更加优雅和有效的方式。下面的程序展示了这是怎么完成的。

f = open ('myfile.txt', ’r')

for line in f:
    print (line, end='')
f.close()

for循环会在文本文件上逐行循环。当运行它时,你将会得到:

Learn Python in One Day and Learn It Well
Python for Beginners with Hands-on Project
The only book you need to start coding in
Python immediately
http://www.learncodingfast.com/python

8.3 写入文本文件

既然已经学会了如何打开并读取文件,那么就让我们试着写入文件吧。为了写入文件,我将会使用a(添加)模式。你也可以使用w模式,但如果文件存在的话,这将会删除文件中原有的内容。尝试运行下面的程序。

f= open ('myfile,txt','a')

f.write('\nThis sentence will be
appended.')
f.write('\nPython is Fun!')

f.close()

其中我们使用write)函数向文件中添加了"This sentence will be appended.“和"Python is Fun!”,每行都会从一个新行开始,因为我们使用了换行符号“\n”你将会得到:

Learn Python in one Day and Learn It Well
Python for Beginners with Hands-on Project
The only book you need to start coding in
Python immediately
http://www.learncodingfast.com/python
This sentence will be appended.
Python is Fun!

8.4 通过缓冲大小来打开并读取文本文件

有时,我们可能想通过缓冲大小来读取文件,这样我们的程序就可以不使用太多的内存资源。为了这么做,可以使用read()函数(而不是readline()函数),它可以让我们指定我们想要的缓冲大小。尝试下面的程序。

inputFile = open (‘myfile.txt’, ‘r’)
outputFile = open (‘myoutputfile.txt’,‘w’)

msg = inputFile.read(10)

while len(msg):
outputFile.write(msg)
msg = inputFile.read(10)

inputFile.close()
outputFile.close()

首先,我们打开两个文件,inputFile.txt和outputFile.txt文件分别用于读取和写入。

接下来,我们使用语句msg=inputFile.read(10)和一个while循环一次从文件中循环10位。括号中的值10告诉read0函数仅仅读取10位的数据。while条件while len(msg):检查变量msg的长度。只要它的长度不为0,循环就会继续。

在while循环内部,语句outputFile.write(msq)把信息写入输出文件中。在写入信息后,语句msg=inputFile.read(10)将会读入下10位的数据,并会一直这么做,直到读取完整个文件。读完文件,程序就把两个文件都关闭了。

当你运行程序时,一个新的文件myoutputfile.txt将会被创建。打开文件时,你将会注意到它和输入文件myfile.txt的内容是一样的。为了证明每次仅读取10位的数据,你可以把程序中的outputFile.write(msg)这一行修改为outputFile.write(msg+‘\n’)。再次运行程序。现在myoutputfile.txt中的每行将最多包含10个字符。下面的这段将会是你得到的输出。
Learn Pyth
on in One
pay and Le
arn It Wel

8.5 打开、读取并写入二进制文件

二进制文件表示的是任何包含非文字的文件,比如图像或者视频文件。为了处理二进制文件,我们可以使用rb或者wb模式。把一个jpeg文件复制到你的桌面上,并把它重命名为myimage.jpg。现在编辑上面的程序,把程序的前两行:

inputFile = open (‘myfile.txt’, ‘r’)
outputFile = open (‘myoutputfile.txt’,‘w’)
改为:
inputFile = open (‘myimage.jpg’,‘rb’)
outputFile = open (‘myoutputimage.jpg’,
‘wb’)

确保你也把语句outputFile.write(msg+‘\n’)修改为outputFile.write(msg)。

运行新的程序。你应该会在桌面上得到一个新的叫作myoutputimage.jpg的图片文件。当你打开这个图片文件时,它看起来应该和myimage.jpg是一模一样的。

8.6 删除和重命名文件

在处理文件时,我们需要学习的另外两个有用的函数是remove()和rename()。 这两个函数在os模块里面,在使用它们之前,我们需要在程序中引入它们。

remove()函数会删除一个文件。语法是remove(filename)。比如,为了删除myfile.txt,我们可以这么写remove(‘myfile.txt’)。

rename()函数会重命名一个文件。语法是rename(old name, new name)。 为了把oldfile.txt重命名为newfile.txt,我们可以这么写rename(‘oldfile.txt’, ‘newfile.txt’)。
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值