练习 15 阅读文件
在这个练习中你要写两个文件。一个是通常你要运行的 ex15.py
,一个是叫做 ex15_sample.txt
的文本文件。以下是文本文件中要输入的内容:
我们要做的就是在我们的脚本中打开这个文件并把它打印出来。然而,我们不想只是简单粗暴(hard coding)地把 ex15_sample.txt
这个文件名输入进去,hard coding 的意思是把一些应该从用户那里获取的信息直接放到源代码里。这样不好,因为我们随后会需要它载入别的文件。解决方法是用 argv
或者 input
来问用户应该打开哪个文件,而不是 hard coding 文件名。
ex15.py
这个文件里发生了一些奇妙的事情,让我们快速分解来看一下:
第 7 行打印了一些信息,第 8 行就有一些新东西了。我们对 txt 用了一个叫做 read.
的函数,你从 那里得到的是一个文件,而且你还可以通过 . 命令名,以及参数,来给它一个命令,就像用 open
和 input
那样。区别是,txt.(read)
是说:txt
,执行不带参数的 read
命令!
剩下的部分基本上类似,但是我们会把分析留到附加练习里。
我创建了一个叫做 ex15_sample.txt
的文件来运行我的脚本。
练习 15 会话
- 在每行上面添加注释解释其含义。
- 如果你不确定,上网搜,或者问别人,比如你不知道 open 的用法,直接搜
python3.6 open
即可。 - 把第 10-15 行删掉(或者用别的方法使其失效)然后再运行脚本。
- 只用 input 来试试运行这个脚本。为什么要获取文件名的话一种方法比另一种方法更好?
- 在你的脚本中对
txt
调用close()
以及txt_again
变量。当你对它们完成操作后关掉文件是非常重要的。
txt = open(filename)
会返回文件的内容吗? 不会。它其实是创建了一个叫做“文件对象”(file object)的东西。你可以把它想象成曾经的 DVD 播放器,你可以在里面移动然后“读取”它们。但是 DVD 播放器不是 DVD 本身,就像文件对象也不是文件本身一样。
我无法像你附加练习 7 中说的那样在 Terminal/PowerShell 里输入代码。 首先,在命令行输入 python3.6
然后敲回车。现在你已经在 python3.6 里面了。然后你可以输入代码,python 就会运行一些。试着这样玩玩,然后输入 quit()
并回车,退出。
为什么打开文件两次不会收到报错?Python 不会限制你只能打开一次文件,事实上有时候确实需要打开多次。
from sys import argv
是什么意思?现在你只需要明白 sys
是一个包(package),这个短语是说从那个包里获取 argv
功能(feature)。你会在后面深入学习这块内容。