笨办法学Python(十五)

习题 15: 读取文件

你已经学过了 raw_input 和 argv,这些是你开始学习读取文件的必备基础。你可能需要多多实验才能明白它的工作原理,所以你要细心做练习,并且仔细检查结果。处理文件需要非常仔细,如果不仔细的话,你可能会吧有用的文件弄坏或者清空。导致前功尽弃。

这节练习涉及到写两个文件。一个正常的 ex15.py 文件,另外一个是 ex15_sample.txt,第二个文件并不是脚本,而是供你的脚本读取的文本文件。以下是后者的内容:

1 This is stuff I typed into a file.
2 It is really cool stuff.
3 Lots and lots of fun to have in here.

我们要做的是把该文件用我们的脚本“打开(open)”,然后打印出来。然而把文件名ex15_sample.txt 写死(hardcode)在代码中不是一个好主意,这些信息应该是用户输入的才对。如果我们碰到其他文件要处理,写死的文件名就会给你带来麻烦了。我们的解决方案是使用 argv 和 raw_input 来从用户获取信息,从而知道哪些文件该被处理。

 1 from sys import argv
 2
 3 script, filename = argv
 4
 5 txt = open(filename)
 6
 7 print "Here‘s your file %r:" % filename
 8 print txt.read()
 9
10 print "Type the filename again:"
11 file_again = raw_input("> ")
12
13 txt_again = open(file_again)
14
15 print txt_again.read()

这个脚本中有一些新奇的玩意,我们来快速地过一遍:

代码的 1-3 行使用 argv 来获取文件名,这个你应该已经熟悉了。接下来第 5 行我们看到 open 这个新命令。现在请在命令行运行 pydocopen 来读读它的说明。你可以看到它和你自己的脚本、或者 raw_input 命令类似,它会接受一个参数,并且返回一个值,你可以将这个值赋予一个变量。这就是你打开文件的过程。

第 7 行我们打印了一小行,但在第 8 行我们看到了新奇的东西。我们在 txt 上调用了一个函数。你从 open 获得的东西是一个 file (文件),文件本身也支持一些命令。它接受命令的方式是使用句点 . (英文称作 dot 或者 period),紧跟着你的命令,然后是类似 open 和 raw_input 一样的参数。不同点是:当你说 txt.read 时,你的意思其实是:“嘿 txt!执行你的 read 命令,无需任何参数!”

脚本剩下的部分基本差不多,不过我就把剩下的分析作为加分习题留给你自己了。

你应该看到的结果

我的脚本叫 “ex15_sample.txt”,以下是执行结果:

加分习题

这节的难度跨越有点大,所以你要尽量做好这节加分习题,然后再继续后面的章节。

  1. 在每一行的上面用注解说明这一行的用途。

  2. 如果你不确定答案,就问别人,或者上网搜索。大部分时候,只要搜索 “python” 加上你要搜的东西就能得到你要的答案。比如搜索一下“python open”。

  3. 我使用了“命令”这个词,不过实际上它们的名字是“函数(function)”和“方法(method)。上网搜索一下这两者的意义和区别。看不明白也没关系,迷失在别的程序员的知识海洋里是很正常的一件事情。

  4. 删掉 10-15 行使用到 raw_input 的部分,再运行一遍脚本。

  5. 只是用 raw_input 写这个脚本,想想那种得到文件名称的方法更好,以及为什么。

  6. 运行 pydoc file 向下滚动直到看见 read() 命令(函数/方法)。看到很多别的命令了吧,你可以找几条试试看。不需要看那些包含 __ (两个下划线)的命令,这些只是垃圾而已。

  7. 再次运行 python 在命令行下使用 open 打开一个文件,这种 open 和 read 的方法也值得你一学。

  8. 让你的脚本针对 txt and txt_again 变量执行一下 close() ,处理完文件后你需要将其关闭,这是很重要的一点。

时间: 2024-08-02 10:53:59

笨办法学Python(十五)的相关文章

笨办法学Python 练习13和14

原题: 1 from sys import argv 2 3 script, first, second, third = argv 4 5 print "The script is called:", script 6 print "Your first variable is:", first 7 print "Your second variable is:", second 8 print "Your third variabl

笨办法学 Python (Learn Python The Hard Way)

最近在看:笨办法学 Python (Learn Python The Hard Way) Contents: 译者前言 前言:笨办法更简单 习题 0: 准备工作 习题 1: 第一个程序 习题 2: 注释和井号 习题 3: 数字和数学计算 习题 4: 变量(variable)和命名 习题 5: 更多的变量和打印 习题 6: 字符串(string)和文本 习题 7: 更多打印 习题 8: 打印,打印 习题 9: 打印,打印,打印 习题 10: 那是什么? 习题 11: 提问 习题 12: 提示别人

笨办法学Python(二十五)

习题 25: 更多更多的练习 我们将做一些关于函数和变量的练习,以确认你真正掌握了这些知识.这节练习对你来说可以说是一本道:写程序,逐行研究,弄懂它. 不过这节练习还是有些不同,你不需要运行它,取而代之,你需要将它导入到 python 里通过自己执行函数的方式运行. 首先以正常的方式 python ex25.py 运行,找出里边的错误,并把它们都改正过来.然后你需要接着下面的答案章节完成这节练习. 你应该看到的结果 这节练习我们将在你之前用来做算术的 python 编译器里,用交互的方式和你的.

笨办法学Python(二十八)

习题 28: 布尔表达式练习 上一节你学到的逻辑组合的正式名称是"布尔逻辑表达式(boolean logic expression)".在编程中,布尔逻辑可以说是无处不在.它们是计算机运算的基础和重要组成部分,掌握它们就跟学音乐掌握音阶一样重要. 在这节练习中,你将在 python 里使用到上节学到的逻辑表达式.先为下面的每一个逻辑问题写出你认为的答案,每一题的答案要么为 True 要么为 False.写完以后,你需要将python 运行起来,把这些逻辑语句输入进去,确认你写的答案是否

笨办法学Python(二十九)

习题 29: 如果(if) 下面是你要写的作业,这段向你介绍了"if语句".把这段输入进去,让它能正确执行.然后我们看看你是否有所收获. 1 people = 20 2 cats = 30 3 dogs = 15 4 5 6 if people < cats: 7 print "Too many cats! The world is doomed!" 8 9 if people > cats: 10 print "Not many cats!

笨办法学Python(二十六)

习题 26: 恭喜你,现在可以考试了! 你已经差不多完成这本书的前半部分了,不过后半部分才是更有趣的.你将学到逻辑,并通过条件判断实现有用的功能. 在你继续学习之前,你有一道试题要做.这道试题很难,因为它需要你修正别人写的代码.当你成为程序员以后,你将需要经常面对别的程序员的代码,也许还有他们的傲慢态度,他们会经常说自己的代码是完美的. 这样的程序员是自以为是不在乎别人的蠢货.优秀的科学家会对他们自己的工作持怀疑态度,同样,优秀的程序员也会认为自己的代码总有出错的可能,他们会先假设是自己的代码有

笨办法学Python(三十二)

习题 32: 循环和列表 现在你应该有能力写更有趣的程序出来了.如果你能一直跟得上,你应该已经看出将"if 语句"和"布尔表达式"结合起来可以让程序作出一些智能化的事情. 然而,我们的程序还需要能很快地完成重复的事情.这节习题中我们将使用 for-loop (for 循环)来创建和打印出各种各样的列表.在做的过程中,你会逐渐明白它们是怎么回事.现在我不会告诉你,你需要自己找到答案. 在你开始使用 for 循环之前,你需要在某个位置存放循环的结果.最好的方法是使用列表

笨办法学Python(三十)

习题 30: Else 和 If 前一习题中你写了一些 "if 语句(if-statements)",并且试图猜出它们是什么,以及实现的是什么功能.在你继续学习之前,我给你解释一下上一节的加分习题的答案.上一节的加分习题你做过了吧,有没有? 你认为 if 对于它下一行的代码做了什么? If 语句为代码创建了一个所谓的"分支",就跟 RPG 游戏中的情节分支一样.if 语句告诉你的脚本:"如果这个布尔表达式为真,就运行接下来的代码,否则就跳过这一段.&quo

笨办法学Python(十)

习题 10: 那是什么? 在习题 9 中我你接触了一些新东西.我让你看到两种让字符串扩展到多行的方法.第一种方法是在月份之间用 \n (back-slash n )隔开.这两个字符的作用是在该位置上放入一个"新行(new line)"字符. 使用反斜杠 \ (back-slash) 可以将难打印出来的字符放到字符串.针对不同的符号有很多这样的所谓"转义序列(escape sequences)",但有一个特殊的转义序列,就是 双反斜杠(double back-slas