你已經(jīng)學過 raw_input 和 argv,這些是你開始學習讀取文件的必備基礎。你可能需要多多實驗才能明白它的工作原理,所以你要細心做練習,并且仔細檢查結果。處理文件需要非常仔細,否則,你可能會把有用的文件弄壞或者清空。導致前功盡棄。
這節(jié)練習涉及到寫兩個文件。一個正常的 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.
我們要做的是用我們的腳本“打開(open)”這個文件,然后打印出來。然而把文件名 ex15_sample.txt 寫死在代碼中并不是一個好主意,這些信息應該是用戶輸入的才對。如果我們碰到其他文件要處理,寫死的文件名就會給你帶來麻煩了。我們的解決方案是使用 argv 和 raw_input 來從用戶獲取信息,從而知道哪些文件該被處理。
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 獲得了一個文件,文件本身也支持一些命令。它接受命令的方式是使用句點 . (英文稱作 dot 或者 period),緊跟著你的命令,然后是類似 open 和 raw_input 一樣的參數(shù)。不同點是:當你執(zhí)行 txt.read 時,你的意思其實是:“嘿 txt!執(zhí)行你的 read 命令,無需任何參數(shù)!”
腳本剩下的部分基本差不多,不過我就把剩下的分析作為附加題留給你自己了。
我創(chuàng)建了一個名字叫做 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é)。
1.在每一行的上面加上注釋。 2.如果你不確定答案,就問別人,或者上網(wǎng)搜索。大部分時候,只要搜索 “python” 加上你要搜的東西就能得到你要的答案。比如搜索一下“python open”。 3.我使用了“命令”這個詞,不過實際上它們的名字是“函數(shù)(function)”和“方法(method)。上網(wǎng)搜索一下這兩者的意義和區(qū)別。看不明白也沒關系,這本書后面也會講到這些。 4.刪掉 10-15 行使用到 raw_input 的部分,再運行一遍腳本。 5.只用 raw_input 寫這個腳本,想想哪種得到文件名稱的方法更好?為什么? 6.運行 python 在命令行下使用 open 打開一個文件,這種 open 和 read 的方法也值得你一學。 7.讓你的腳本對 txt 和 txt_again 兩個變量執(zhí)行一下 close(),處理完文件后你需要將其關閉,這是很重要的一點。
不是的。它的返回值我們稱為“文件對象”。你可以把文件想象成 19 世紀 50 年代的大型計算機上的老舊的磁帶驅動器, 或者是像現(xiàn)在的 DVD 播放器,你可以在他們內部走動,然后閱讀他們。但是文件對象并不是文件的文本內容一樣就好像 DVD 播放器也不是一個 DVD 視頻.
首先,在命令行里輸入 python 并回車,現(xiàn)在你已經(jīng)進入了一個 python 解析器。接下來你就可以輸入一系列的代碼,python 會一一執(zhí)行你的代碼。最后別忘了輸入 quit()并回車退出 python。
Python 不會限制你只能打開一個文件一次,有時這是必要的。
目前來說,你可以認為 sys 是一個包,這句代碼的意思是從 sys 的包中引入 argv 功能模塊。
你不能這么寫,請按照我的示例寫代碼,并像我一樣在命令行里運行腳本。