如果你做了上一个练习的加分习题,你应该已经了解了各种文件相关的命令(方法 / 函数)。你应该记住的命令如下:
close – 关闭文件。跟你编辑器的 文件 -> 保存 .. 一个意思。
read – 读取文件内容。你可以把结果赋给一个变量。
readline – 读取文本文件中的一行。
truncate – 清空文件,请小心使用该命令。
write(stuff) – 将 stuff 写入文件。
这是你现在该知道的重要命令。有些命令需要接受参数,这对我们并不重要。你只要记住 write 的用法就可以了。 write 需要接收一个字符串作为参数,从而将该字符串写入文件。
让我们来使用这些命令做一个简单的文本编辑器吧# -*- coding:utf-8 -*-
import sys #调用sys库
script, filename = sys.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. Goodby!"
target.truncate() #清空文件
print "Now I'm going to ask you fro three lines."
line1 = raw_input("Line1 1:")
line2 = raw_input("Line1 2:")
line3 = raw_input("Line1 3:")
print "I'm going to write thers to the file"
target.write(line1)
target.write("")
target.write(line2)
target.write("")
target.write(line3)
target.write("")
print "And finally, we close it."
target.close()
这个文件是够大的,大概是你键入过的最大的文件。所以慢慢来,仔细检查,让它能运行起来。有一个小技巧就是你可以让你的脚本一部分一部分地运行起来。先写 1-8 行,让它运行起来,再多运行 5 行,再接着多运行几行,以此类推,直到整个脚本运行起来为止。
结果:D:\python\----python>python 习题16.py ex15_sample.txt
We're going to erase 'ex15_sample.txt'.
If you don't want that, hit CTRL-C (^C) .
If you do want that, hit Return.
?
Opening the file...
Truncating the file. Goodby!
Now I'm going to ask you fro three lines.
Line1 1:i love you
Line1 2:i hate you
Line1 3:i love you and i hate you
I'm going to write thers to the file
And finally, we close it.
D:\python\----python>
加分习题
1. 如果你觉得自己没有弄懂的话,用我们的老办法,在每一行之前加上注解,为自己理清思路。就算不能理清思路,你也可以知道自己究竟具体哪里没弄明白。
2. 写一个和上一个练习类似的脚本,使用 read 和 argv 读取你刚才新建的文件。# -*- coding:utf-8 -*-
import sys
filename ='D:\python\----python\ex16_sample.txt'
print "打开 %s 文件" % filename
txt = open(filename) # 打开文件
print "阅读 %s 文件" % filename
print txt.read()
print '清除 %s 文件'% filename
txt = open(filename,'w') # 文件进入写入模式
txt.truncate()
print "写入 %s 文件" % filename
line1 = raw_input("line1: ")
line2 = raw_input("line2: ")
line3 = raw_input("line3: ")
txt.write(line1)
txt.write('')
txt.write(line2)
txt.write('')
txt.write(line3)
print '关闭文件'
txt.close()
3. 文件中重复的地方太多了。试着用一个 target.write() 将 line1, line2, line3 打印出来,你可以使用字符串、格式化字符、以及转义字符。txt1 = open(filename)
print txt1.read()
4. 找出为什么我们需要给 open 多赋予一个 'w' 参数。提示: open 对于文件的写入操作态度是安全第一,所以你只有特别指定以后,它才会进行写入操作。
方便后期写入文件
5. 如果你用 'w' 模式打开文件,那么你是不是还要 target.truncate() 呢?阅读以下Python 的 open 函数的文档找找答案。
‘w’ 表示文件进入写入模式,target.trncater() 只是清除txt文件里面的内容。
常见问题回答
如果用了 'w' 参数, truncate() 是必须的吗?
不是必须的,“w” 可以不用清除txt文件,就可以写入文件代替。
'w' 是什么意思?
它只是一个特殊字符串,用来表示文件的访问模式。如果你用了 'w' 那么你的文件就是写入(write) 模式。除了 'w' 以外,我们还有 'r' 表示读取( read ), 'a' 表示追加 (append) 。
还有哪些修饰符可以用来控制文件访问?
最重要的是 + 修饰符,写法就是 'w+', 'r+', 'a+' —— 这样的话文件将以同时读写的方式打开,而对于文件位置的使用也有些不同。
如果只写 open(filename) 那就使用 'r' 模式打开的吗?
是的,这是 open() 函数的默认工作方式。