你已經(jīng)學過了 raw_input 和 argv,這些是你開始學習讀取文件的必備基礎。你可能需要多多實驗才能明白它的工作原理,所以你要細心做練習,并且仔細檢查結果。處理文件需要非常仔細,如果不仔細的話,你可能會吧有用的文件弄壞或者清空。導致前功盡棄。
這節(jié)練習涉及到寫兩個文件。一個正常的 ex15.py 文件,另外一個是 ex15_sample.txt,第二個文件并不是腳本,而是供你的腳本讀取的文本文件。以下是后者的內(nèi)容:
This is stuff I typed into a file.
It is really cool stuff.
Lots and lots of fun to have in here.
我們要做的是把該文件用我們的腳本“打開(open)”,然后打印出來。然而把文件名ex15_sample.txt 寫死(hardcode)在代碼中不是一個好主意,這些信息應該是用戶輸入的才對。如果我們碰到其他文件要處理,寫死的文件名就會給你帶來麻煩了。我們的解決方案是使用 argv 和 raw_input 來從用戶獲取信息,從而知道哪些文件該被處理。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | from sys import argv
script, filename = argv
txt = open(filename)
print "Here's your file %r:" % filename
print txt.read()
print "Type the filename again:"
file_again = raw_input("> ")
txt_again = open(file_again)
print txt_again.read()
|
這個腳本中有一些新奇的玩意,我們來快速地過一遍:
代碼的 1-3 行使用 argv 來獲取文件名,這個你應該已經(jīng)熟悉了。接下來第 5 行我們看到 open 這個新命令?,F(xiàn)在請在命令行運行 pydoc open 來讀讀它的說明。你可以看到它和你自己的腳本、或者 raw_input 命令類似,它會接受一個參數(shù),并且返回一個值,你可以將這個值賦予一個變量。這就是你打開文件的過程。
第 7 行我們打印了一小行,但在第 8 行我們看到了新奇的東西。我們在 txt 上調用了一個函數(shù)。你從 open 獲得的東西是一個 file (文件),文件本身也支持一些命令。它接受命令的方式是使用句點 . (英文稱作 dot 或者 period),緊跟著你的命令,然后是類似 open 和 raw_input 一樣的參數(shù)。不同點是:當你說 txt.read 時,你的意思其實是:“嘿 txt!執(zhí)行你的 read 命令,無需任何參數(shù)!”
腳本剩下的部分基本差不多,不過我就把剩下的分析作為加分習題留給你自己了。
我的腳本叫 “ex15_sample.txt”,以下是執(zhí)行結果:
$ python ex15.py ex15_sample.txt
Here's your file 'ex15_sample.txt':
This is stuff I typed into a file.
It is really cool stuff.
Lots and lots of fun to have in here.
Type the filename again:
> ex15_sample.txt
This is stuff I typed into a file.
It is really cool stuff.
Lots and lots of fun to have in here.
$
這節(jié)的難度跨越有點大,所以你要盡量做好這節(jié)加分習題,然后再繼續(xù)后面的章節(jié)。