我要悄悄学Python之文件与异常(一)

刚刚过完清明的假期,现在周末也过完了,转眼间就是周二了。

不知道年后的这段时间里,你们是否也会有这样的感受:

身边的大佬越来越多,差距越来越大,我不能停下;

大家都在做副业赚钱,我也要抓紧跟上脚步;

假期同事和舍友都在学习课程,我也需要去报名提升自己;

生怕一天不努力,就会被人远远的甩在身后

我们总是在不自觉地,与他人较劲,在别人的世界里争高低,让自己喘不过气,活得异常焦虑。

文件与异常(一)

在本篇文章中你可以学到:

  • 读取和写入文本文件
  • 处理数据集合
  • 处理命令行参数
  • 抛出和处理异常

读取和写入文本文件

文本文件的例子不仅包括使用windows记事本等简单文本编辑器创建的文件,还包括Python源代码文件和HTML文件。在接下来的过程中,你会学到如何处理文件中的数据。文件处理在很多学科中都是非常有用的技能,因为要分析或处理大数据集通常是存储在文件中的。

打开文件

为了访问文件,必须先打开它,打开文件时,你指定文件的名字,或者如果文件存储在其他文件夹时要在文件名前面加上文件路径。要注意的是:当要打开的文件与代码文件在相同路径的情况下的时候,我们才说直接写文件名即可。假设,现在你要读取与程序在相同文件夹中名为input.txt的文件中的数据,那么你可以使用下面的函数来调用打开这个文件:

infile = open('input.txt', 'r')

这个语句可以读模式打开文件通过字符串参数“r”来表示并且返回一个与input.txt文件关联的文件对象。以读模式打开文件时,文件必须存在,否则会引发异常。

调用open函数返回的文件对象必须保存在一个变量中,所有处理文件的操作都能通过这个文件对象来完成。

为了以写模式打开一个文件,你提供文件名作为open函数的第一个参数,并提供字符串"w"作为第二个参数:

outfile = open('output.txt', 'w')

如果输出文件已经存在,那么它在写入新数据之前会被清空。如果文件不存在一个空文件。处理完文件之后,确定使用close方法关闭文件。

infile.close()
outfile.close()

如果你的程序以写模式打开了文件,退出时没有及时关闭,有些输出的内容可能并没有写入到磁盘文件。

文件关闭之后,再重新打开之前就不能再使用了。试图这样做的话会导致异常。

读取文件

为了从文件中读取一行文本,调用打开文件时返回文件对象的readline方法:

line = infile.readline()

打开文件时,输入标记被定位在文件的开始处。readline方法从当前位置开始读取文本,直到遇到行尾,然后输入标记被移动到下一行。readline方法返回读取到的文本,包括表示行尾的换行符。

假设input.txt文件中包含下面几行:

flying 
circus

第一次调用readline方法时会得到字符串’flying\n’,其中\n代表一行结束的换行符。如果你再调用readline方法,会返回字符串’circus/n’。再次调用readline方法会返回空字符串。

从文件中读取多行文本,我们只需要重复读取一行文本并处理它,因为我们已经到达文件的末尾,如果文件中包含一个空行,那么readline方法会返回一个只包含换行符’\n’的字符串。

infile = open('input.txt', 'r')
line = infile.readline()
while line!= '':
	print(line)
	line = infile.readline()

警戒值是空字符串,也就是达到文件尾部之后readline方法返回的内容。

与input方法一样,readline方法也只能返回字符串。如果文件中包含数字数据,使用int或float函数把字符串转化为数字值。

例如:

value = int(line)

注意:把字符串转换为数值时,尾部的换行符会被忽略。

写入文件

你可以以写的模式打开的文件中写入文本。这通过文件对象的write方法来完成。例如,我们可以使用下面的语句往输出文件中写入字符串’Hello World’;

outfile = open('outfile.txt', 'w')
outfile.write('Hello World\n')

文件对象的write方法接收单个字符串作为参数,并立刻将字符串写入。那个字符串被追加到文件的尾部,你必须显式的写一个换行符来另起一行。

count = 10
totle = 8.252
outfile = open('outfile.txt', 'a')
outfile.write('Number of entries: %d\nTotal: %8.2f\n' % (count, totle))

注意:需要以追加的模式打开文件,通过字符串传参’a’表示。

作为代替,可以使用print函数往文件中写入文本。这时需要提供文件对象作为参数file的值。

outfile = open('outfile.txt', 'a')
print('Hello World', file=outfile)

文件处理实战

假如你有一个包含一系列浮点数的文本文件,每行一个浮点数。你需要读取这些值并写入到一个新的输出文件中,按列对齐,然后再写入它们的总和和平局值。

文件的内容如下:

32.0
45.0
50.0
60.2
78.3
##
# 该程序用来读取一个包含数字的文件,然后写入另一个文件
# 按列对齐,最后写入它们的总和和平均值
# 提示用户输入输出文件的名字

inputFileName = input('Input file name: ')
outputFileName = input('Output file name: ')


# 打开输入文件和输出文件
infile = open(inputFileName, 'r')
outfile = open(outputFileName, 'w')

# 读取输入文件,并写出输出文件
total = 0.0
count = 0

line = infile.readline()
while line != '':
	value = float(line)
	outfile.write('%15.2f\n' % value)
	total = total + value
	count = count + 1
	line = infile.readline()


outfile.write('%15s\n' % '-------------')
outfile.write('Total: %6.2f\n' % total)
print(count)
avg = total / count
outfile.write('Average: %6.2f\n' % avg)
infile.close()
outfile.close()

易错提示

1、文件中的反斜线

当你使用字符串常量指定文件名并且文件名中包含反斜线字符时,你必须每个反斜线写两次:

infile = open('D:\\github\\Python_base\\第七章 文件与异常\\代码demo\\input.txt')

字符串内的反斜线是转义字符,和下一个字符组成特殊的含义。例如\n表示换行,\\的组合表示单个反斜线

然而,当用户为程序提供文件名时,用户不应该输入两次反斜线。

2、打开文件

当以读的方式打开文件时,该文件必须是存在的,否则会出现异常。不论是以读的方式打开文件,还是以写的方式打开文件,文件对象都必须调用close方法关闭文件。

自我测试

1、如果调用infile = open(’ ', ‘r’)会发生什么

2、如果你调用infile = open(‘input.txt’, ‘r’)

3、下面代码有什么错误?

infile = open('input.txt', 'r')
infile.close()
line = infile.readline()
while line != '':
   print(line)
   line = infile.readline()

4、我们如何以下面的格式把’Hello World!'写入到输出文件?

Hello,
World!

最后

迷茫不仅阻挡前方的去路,还让我们看不清未来的方向,使得我们越发焦虑,生活越发低沉…

面对每一次的失败,我们要相信:

这不是结束,甚至不是结束的开始,而是开始的结束

看完觉得有收获的,可以给啃书君点个【在看】,愿我们都能勇往直前,找到适合自己的道路。

我是啃书君,一个专注于学习的人,你懂的越多,你不懂的越多,更多精彩内容,我们下期再见!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值