原文链接:http://learnpythonthehardway.org/book/ex15.html
你已经学习了关于 raw_input 和 argv 的相关知识,那么现在你可以开始学习如何读文件了。你可能必须做完大部分练习才能理解发生了什么事情,所以你必须仔细的学习并且做好检查工作。如果你不够细心的话文件操作可能很容易就毁掉你整个功能。
这次的练习中涉及到写两个文件。一个就是你经常运行的 ex15.py 文件,但是另一个是名为 ex15_sample.txt 的文件。第二个文件不是脚本文件而是一个无格式文本文件我们可以在脚本中直接读取的一种格式文件。下面就是这个文件的文本内容:
This is stuff I typed into a file.
It is really cool stuff.
Lots and lots of fun to have in here.
我们想要做的就是在我们脚本中打开这个文件并且把其中的内容打印出来。然而,我们不想用“硬编码”的方式来那个将名为 ex15_sample.txt的文本内容加载到我们的脚本中。“硬编码”的意思是把本应该来自用户输入内容写作一个常量的字符串信息放到我们的脚本中。这是不好的做法,因为在后面我们还想加载其他文件内容。解决这个问题的办法就是使用 argv 和 raw_input 来要求用户输入想要读取的文件名来来代替“硬编码”方式设置的文件名。
from sys import argv
scipt ,filename = argv
txt = open(filename)
print "Here's your file %r:" % filename
print txt.read()
print "Type the filename again:"
file_again = raw_input("> ")
txt_again = open(file_again)
print txt_again.read()
这个脚本文件中将会发生一些神奇的事情,让我们赶紧来分析一下这个些代码:
1~3行是我吗所熟悉的使用 argv 来得到一个文件名。在下面的五行中有一个新的命令 open 。现在,运行 pydoc open相关命令阅读对这个命令的介绍。主要到这其实很像你
脚本中的 raw_input功能,都是得到一个相关参数后将其赋给你自己的一个变量。这里你只是用open做了一个打开文件的操作。
在第7行我们打印了一小行文本,但是在第8行就有一个新奇的东西了。我们调用了txt上的一个函数。txt 就是打开 file 后返回的一个值,并且它可以接受你给它的指令。一个文件名可以通过 “."(点 或者 英式句号),指令名称和参数三个组成来调用一个相关指令。就行如 open 和 raw_input 函数一样。不同之处在于当你说 txt.read()你的意思就是:“嘿,txt !你读取了一个没有带参数的指令”。
程序中剩下的几行原理都差不多,所以剩下的几个就留在研究训练中让你来分析。
输出结果如下:
E:\>python ex15.py ex15_sample.txt
Here's your file 'ex15_sample.txt':
This is stuff I typed into a file.
It is really cool stuff.
Lots and lots of fun to have in here.
Type the filename again:
> ex15_sample.txt
This is stuff I typed into a file.
It is really cool stuff.
Lots and lots of fun to have in here.