Exercise 17:更多文件操作

原文链接:http://learnpythonthehardway.org/book/ex17.html

       现在让我们做更多关于文件的操作练习。我们打算写一个Python 脚本来实现将一个文件的内容复制到另一个文件中。这次脚本程序虽然非常简短,但是它将会给你对文件操作有一些额外的想法。

from sys import argv
from os.path import exists

script ,from_file ,to_file = argv

print "Copying from %s to %s" % (from_file ,to_file)

#we could do these two on one line too ,how?
in_file = open(from_file)
indata = in_file.read()

print "The input file is %d bytes long" % len(indata)

print "Does the ouput file exist? %r" % exists(to_file)
print "Ready ,hit RETURN to continue ,CTRL-C to abort."
raw_input()

out_file = open(to_file ,'w')
out_file.write(indata)

print "Alright ,all done."

out_file.close()
in_file.close()
       你应该立即可以注意到我们又用 import导入了一个很好用的 exists 命令。如果exists 函数中作为参数的那个字符串所代表的文件存在的话,那么它就返回 True值,否则就返回False 。我们在这本书的下半部分都将使用到这个函数来做很多事情,不过你现在你应该学会如何用import导入它。

       使用import你就可以使用很多其他程序员写好的免费的更好的(额,一般来说都是更好的)的代码,这样你就不用再去写那些代码了。

输出结果如下:

       就像运行前几次的脚本一样,带有两个参数来运行脚本:一个是被复制的文件名,另一个是复制到的文件名。我打算用一个简单的测试文件,名称也命名为test.txt。
c:\>python ex17.py test.txt new_file.txt
Copying from test.txt to new_file.txt
The input file is 46 bytes long
Does the ouput file exist? True
Ready ,hit RETURN to continue ,CTRL-C to abort.

Alright ,all done.
这个程序应该适合对任何文件操作。你可以尝试更多类似操作看看会发生什么。
只是你要注意不要损坏了一些重要文件。

警告:
      你看见了我使用了 cat 命令来显示文本内容的操作了吗?你可以在附录A中学习怎样去做这种操作。

研究训练:

1、去阅读关于Python import 的介绍文档,并且启动Python体验一下import的用法。试着导入一些东西看看你是否能正确使用它。如果你不能正确使用也没有关系。
2、这个脚本看起来真的很烦人。在做拷贝操作前根本不需要问你那么多问题,而且在屏幕上的输出也太多了点。试着移除一些功能让程序看起来更加简洁一点。
3、看看你可以把这个脚本写的多短。我可以把它写成只有一行的长度。
ps:自己小小的试了了一小,写成一行,前提你自己要先建好一个拷贝的文件,一个被拷贝的文件:
open(raw_input("To File name:") ,'w').write(open(raw_input("From file name:")).read())
4、在输出结果那一栏的最后一行是否注意到 cat 这个命令?之前这个命令是用来将多个文件合并成一个文件的,但是现在多半用来将一个文件中的内容在屏幕上打印出来。输入 man cat 命令来阅读关于cat 的介绍。
5、使用Windows操作系统的人,可以选择 Linux 或者 OSX 来查看 cat 命令。关于 man 的使用就不用想太多了,因为Windows 下根本没有这个命令。
6、找出为什么在代码的最后要做 output.close()操作。

学生遇见的常见问题:


为什么 'w' 要加单引号?
答:因为它是一个字符串类型数据啊,你现在已经用字符串用过一段时间了,那么你应该知道什么是字符串吧。

你不可能把上面代码只有一行实现的!
答:那;取决于;你;怎么;定义;一行;代码;了。(呵呵,这是几个意思啊)

len()函数式干什么用的?
答:它是获取你传进来的字符串的长度然后返回一个长度数值。你可以试一下。

当我试着将脚本写的更短,但在最后关闭文件的时候出现了错误。
答:你可能是做了这样的操作: indata = open(from_file).read() ,做了这个意味着你不需再在脚本的最后面做 in_file.close() 操作了。等你写的哪一行一运行完 Python 就已经将打开的文件关闭了。

我感觉这次的练习很难属于正常吗?
答:是的,这非常正常。编程中有不明白的地方即使你可能做到了第36个练习,或者你可能整本书都续完而且用Python做了很多东西也还是不会明白。每个人是不同的,所以你只要继续往下学习并且不断复习前面的练习那么你总有一天会将不明白的地方弄懂的。耐心点。

我得到这样一次错误:Syntax:EOL while scanning literal。
答:你应该是忘了正确的给字符串加上单引号。返回错误的那行仔细查看下。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值