W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
你已經(jīng)學(xué)過raw_input
和argv
,這些是你開始學(xué)習(xí)讀取文件的必備基礎(chǔ)。你可能需要多多實(shí)驗(yàn)才能明白它的工作原理,所以你要細(xì)心做練習(xí),并且仔細(xì)檢查結(jié)果。處理文件需要非常仔細(xì),否則,你可能會(huì)把有用的文件弄壞或者清空。導(dǎo)致前功盡棄。
這節(jié)練習(xí)涉及到寫兩個(gè)文件。一個(gè)正常的 ex15.py 文件,另外一個(gè)是 ex15_sample.txt,第二個(gè)文件并不是腳本,而是供你的腳本讀取的文本文件。以下是后者的內(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)”這個(gè)文件,然后打印出來。然而把文件名ex15_sample.txt
寫死在代碼中并不是一個(gè)好主意,這些信息應(yīng)該是用戶輸入的才對(duì)。如果我們碰到其他文件要處理,寫死的文件名就會(huì)給你帶來麻煩了。我們的解決方案是使用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()
這個(gè)腳本中有一些新奇的玩意,我們來快速地過一遍:
代碼的 1-3 行使用argv
來獲取文件名,這個(gè)你應(yīng)該已經(jīng)熟悉了。接下來第 5 行我們看到open
這個(gè)新命令?,F(xiàn)在請(qǐng)?jiān)诿钚羞\(yùn)行pydoc open
來讀讀它的說明。你可以看到它和你自己的腳本、或者raw_input
命令類似,它會(huì)接受一個(gè)參數(shù),并且返回一個(gè)值,你可以將這個(gè)值賦予一個(gè)變量。這就是你打開文件的過程。
第 7 行我們打印了一小行信息,但在第 8 行我們看到了新奇的東西。我們?cè)?txt
上調(diào)用了一個(gè)函數(shù)。你從open
獲得了一個(gè)文件,文件本身也支持一些命令。它接受命令的方式是使用句點(diǎn) .
(英文稱作 dot 或者 period),緊跟著你的命令,然后是類似 open
和 raw_input
一樣的參數(shù)。不同點(diǎn)是:當(dāng)你執(zhí)行txt.read
時(shí),你的意思其實(shí)是:“嘿 txt!執(zhí)行你的 read 命令,無需任何參數(shù)!”
腳本剩下的部分基本差不多,不過我就把剩下的分析作為附加題留給你自己了。
我創(chuàng)建了一個(gè)名字叫做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é)的難度跨越有點(diǎn)大,所以你要盡量做好這節(jié)加分習(xí)題,然后再繼續(xù)后面的章節(jié)。
- 在每一行的上面加上注釋。
- 如果你不確定答案,就問別人,或者上網(wǎng)搜索。大部分時(shí)候,只要搜索 “python” 加上你要搜的東西就能得到你要的答案。比如搜索一下“python open”。
- 我使用了“命令”這個(gè)詞,不過實(shí)際上它們的名字是“函數(shù)(function)”和“方法(method)。上網(wǎng)搜索一下這兩者的意義和區(qū)別。看不明白也沒關(guān)系,這本書后面也會(huì)講到這些。
- 刪掉 10-15 行使用到
raw_input
的部分,再運(yùn)行一遍腳本。- 只用
raw_input
寫這個(gè)腳本,想想哪種得到文件名稱的方法更好?為什么?- 運(yùn)行 python 在命令行下使用 open 打開一個(gè)文件,這種 open 和 read 的方法也值得你一學(xué)。
- 讓你的腳本對(duì)
txt
和txt_again
兩個(gè)變量執(zhí)行一下close()
,處理完文件后你需要將其關(guān)閉,這是很重要的一點(diǎn)。
txt = open(filename)
返回的是文件的文本內(nèi)容嗎?不是的。它的返回值我們稱為“文件對(duì)象”。你可以把文件想象成19世紀(jì)50年代的大型計(jì)算機(jī)上的老舊的磁帶驅(qū)動(dòng)器, 或者是像現(xiàn)在的DVD播放器,你可以在他們內(nèi)部走動(dòng),然后閱讀他們。但是文件對(duì)象并不是文件的文本內(nèi)容一樣就好像DVD播放器也不是一個(gè)DVD視頻.
首先,在命令行里輸入
python
并回車,現(xiàn)在你已經(jīng)進(jìn)入了一個(gè)python解析器。接下來你就可以輸入一系列的代碼,python會(huì)一一執(zhí)行你的代碼。最后別忘了輸入quit()
并回車退出python。
Python不會(huì)限制你只能打開一個(gè)文件一次,有時(shí)這是必要的。
from sys import argv
這句是什么意思?目前來說,你可以認(rèn)為
sys
是一個(gè)包,這句代碼的意思是從sys
的包中引入argv
功能模塊。
ex15_sample.txt = argv
,卻沒有生效。你不能這么寫,請(qǐng)按照我的示例寫代碼,并像我一樣在命令行里運(yùn)行腳本。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: