原文鏈接:http://learnpythonthehardway.org/book/ex15.html
你已經學習了關於 raw_input 和 argv 的相關知識,那麼現在你可以開始學習如何讀文件了。你可能必須做完大部分練習才能理解發生了什麼事情,所以你必須仔細的學習並且做好檢查工作。如果你不夠細心的話文件操作可能很容易就毀掉你整個功能。
這次的練習中涉及到寫兩個文件。一個就是你經常運行的 ex15.py 文件,但是另一個是名爲 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.
我們想要做的就是在我們腳本中打開這個文件並且把其中的內容打印出來。然而,我們不想用“硬編碼”的方式來那個將名爲 ex15_sample.txt的文本內容加載到我們的腳本中。“硬編碼”的意思是把本應該來自用戶輸入內容寫作一個常量的字符串信息放到我們的腳本中。這是不好的做法,因爲在後面我們還想加載其他文件內容。解決這個問題的辦法就是使用 argv 和 raw_input 來要求用戶輸入想要讀取的文件名來來代替“硬編碼”方式設置的文件名。
from sys import argv
scipt ,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 來得到一個文件名。在下面的五行中有一個新的命令 open 。現在,運行 pydoc open相關命令閱讀對這個命令的介紹。主要到這其實很像你
腳本中的 raw_input功能,都是得到一個相關參數後將其賦給你自己的一個變量。這裏你只是用open做了一個打開文件的操作。
在第7行我們打印了一小行文本,但是在第8行就有一個新奇的東西了。我們調用了txt上的一個函數。txt 就是打開 file 後返回的一個值,並且它可以接受你給它的指令。一個文件名可以通過 “."(點 或者 英式句號),指令名稱和參數三個組成來調用一個相關指令。就行如 open 和 raw_input 函數一樣。不同之處在於當你說 txt.read()你的意思就是:“嘿,txt !你讀取了一個沒有帶參數的指令”。
程序中剩下的幾行原理都差不多,所以剩下的幾個就留在研究訓練中讓你來分析。
輸出結果如下:
E:\>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.