# 练习16.读写文件
如果你做了上一个练习的附加题部分,你应该已经了解了文件相关的各种命令(方法/函数)。下面的这张表,是你应该记住的命令:
> - close -- 关闭文件。跟你编辑器的 文件->保存.. 一个意思。
> - read -- 读取文件内容。你可以把结果赋给一个变量。
> - readline -- 读取文本文件中的一行。
> - truncate -- 清空文件,请谨慎使用该命令。
> - write('stuff') -- 将stuff写入文件。
这是你现在该知道的重要命令。有些命令需要接受参数,这对我们并不重要。你只要记住 `write` 需要接收一个字符串作为参数,从而将该字符串写入文件。
让我们来使用这些命令做一个简单的文本编辑器吧:
~~~
from sys import argv
script, filename = argv
print "We're going to erase %r." % filename
print "If you don't want that, hit CTRL-C (^C)."
print "If you do want that, hit RETURN."
raw_input("?")
print "Opening the file..."
target = open(filename, 'w')
print "Truncating the file. Goodbye!"
target.truncate()
print "Now I'm going to ask you for three lines."
line1 = raw_input("line 1: ")
line2 = raw_input("line 2: ")
line3 = raw_input("line 3: ")
print "I'm going to write these to the file."
target.write(line1)
target.write("\n")
target.write(line2)
target.write("\n")
target.write(line3)
target.write("\n")
print "And finally, we close it."
target.close()
~~~
这个文件是够大的,大概是你创建过的最大的文件。所以慢慢来,仔细检查,让它能运行起来。有一个小技巧就是你可以让你的脚本一部分一部分地运行起来。先写 1-8 行,让它运行起来,再多运行5行,再接着多运行几行,以此类推,直到整个脚本运行起来为止。
## 你看到的结果
你将看到两样东西,一个是你脚本的输出:
~~~
$ python ex16.py test.txt
We're going to erase 'test.txt'.
If you don't want that, hit CTRL-C (^C).
If you do want that, hit RETURN.
?
Opening the file...
Truncating the file. Goodbye!
Now I'm going to ask you for three lines.
line 1: Mary had a little lamb
line 2: Its fleece was white as snow
line 3: It was also tasty
I'm going to write these to the file.
And finally, we close it.
~~~
接下来打开你新建的文件(我的是test.txt)检查一下里边的内容,怎么样,不错吧?
## 附加题
> 1. 如果你觉得自己没有弄懂的话,用我们的老办法,在每一行之前加上注解,为自己理清思路。就算不能理清思路,你也可以知道自己究竟具体哪里没弄明白。
> 1. 写一个和上一个练习类似的脚本,使用`read`和`argv`读取你刚才新建的文件。
> 1. 文件中重复的地方太多了。试着用一个 `target.write()` 将 line1, line2, line3 打印出来,你可以使用字符串、格式化字符、以及转义字符。
> 1. 找出为什么我们需要给 open 多赋予一个 'w' 参数。提示: open 对于文件的写入操作态度是安全第一,所以你只有特别指定以后,它才会进行写入操作。
> 1. 如果你使用'w' 模式打开一个文件,那么还需要`target.truncate()`吗?阅读Python关于`open`函数的文档, 看你理解的对不对。
## 常见问题
### Q:`truncate()`方法必须要有参数'w'吗?
> 参考附加题5
### Q: 'w'参数是什么意思?
> 它只是打开文件的一种模式。如果你用了这个参数,表示"以写(`write`)模式打开文件。同样有`'r'`表示只读模式,`'a'`表示追加模式,还有一些其他的修饰符。
### Q: 有什么修饰符我可以用在打开文件的模式上?
> 最重要的一个就是`+`, 使用它,你可以有`'w+'`, `'r+'`, 和`'a+'`模式. 这样可以同时以读写模式打开文件。
### Q: `open(filename)`是以'r' (只读) 模式打开文件吗?
> 是的,'r' 是 `open()`函数的默认参数值。
- 序言
- 前言
- 简介
- 0:安装和准备
- 1:第一个程序
- 2:注释和“#”井号
- 3:数字和数学计算
- 4:变量和命名
- 5:更多的变量和打印
- 6:字符串和文本
- 7:更多的打印(输出)
- 8:打印, 打印
- 9:打印, 打印, 打印
- 10:那是什么?
- 11:提问
- 12:提示别人
- 13:参数, 解包, 变量
- 14:提示和传递
- 15:读文件
- 16:读写文件
- 17:更多文件操作
- 18:命名, 变量, 代码, 函数
- 19:函数和变量
- 20:函数和文件
- 21:函数的返回值
- 22:到目前为止你学到了什么?
- 23:阅读代码
- 24:更多的练习
- 25:更多更多的练习
- 26:恭喜你,可以进行一次考试了
- 27:记住逻辑
- 28:布尔表达式
- 29:IF 语句
- 30:Else 和 If
- 31:做出决定
- 32:循环和列表
- 33:while循环
- 34:访问列表元素
- 35:分支和函数
- 36:设计和调试
- 37:复习符号
- 38:列表操作
- 39:字典,可爱的字典
- 40:模块, 类和对象
- 41:学会说面向对象
- 42:对象、类、以及从属关系
- 43:基本的面向对象的分析和设计
- 44:继承Vs.包含
- 45:你来制作一个游戏
- 46:项目骨架
- 47:自动化测试
- 48:更复杂的用户输入
- 49:写代码语句
- 50:你的第一个网站
- 51:从浏览器获取输入
- 52:开始你的web游戏
- 来自老程序员的建议
- 下一步
- 附录A:命令行教程
- 简介
- 安装和准备
- 路径, 文件夹, 名录 (pwd)
- 如果你迷路了
- 创建一个路径 (mkdir)
- 改变当前路径 (cd)
- 列出当前路径 (ls)
- 删除路径 (rmdir)
- 目录切换(pushd, popd)
- 生成一个空文件(Touch, New-Item)
- 复制文件 (cp)
- 移动文件 (mv)
- 查看文件 (less, MORE)
- 输出文件 (cat)
- 删除文件 (rm)
- 退出命令行 (exit)
- 下一步