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。
答:你應該是忘了正確的給字符串加上單引號。返回錯誤的那行仔細查看下。

發佈了23 篇原創文章 · 獲贊 7 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章