<code>#encoding=utf-8</code>
<code>#author:zhouyu</code>
os這個子產品是用來對系統檔案的一些基本操作的,比較建立檔案,修改檔案以及删除檔案。
檔案的基本操作有以下幾種:
<code>r,以隻讀的形式打開檔案</code>
<code>w,以隻寫的形式打開這個檔案,如果這個檔案存在就覆寫這個檔案來寫東西,否則建立檔案</code>
<code>a,在檔案後面加上你想加的内容,也就是append</code>
<code>rb,以隻讀的形式打開一個二進制檔案</code>
<code>wb,以隻寫的形式打開一個二進制檔案,如果這個檔案存在就覆寫這個檔案來寫東西,否則建立檔案</code>
<code>ab,在一個二進制檔案後面加上你想加的内容,也就是append</code>
<code>r</code><code>+</code><code>,以讀寫的形式打開一個檔案,如果這個檔案不存在會報錯</code>
<code>w</code><code>+</code><code>,以讀寫的形式打開一個檔案,如果這個檔案存在可以覆寫這個檔案來寫東西,否則建立檔案</code>
<code>a</code><code>+</code><code>,以讀寫的形式打開檔案可以在檔案後面加上你想加的内容,也就是append</code>
<code>rb</code><code>+</code><code>,wb</code><code>+</code><code>和ab</code><code>+</code><code>我就不解釋了</code>
一般來說,如果你想擷取這個檔案的内容或者你想修改檔案的資訊,就必須要先打開檔案。
<code>import</code> <code>os </code><code>#導入os子產品</code>
<code>test_file </code><code>=</code> <code>'C:\\test.txt'</code>
<code>opentest </code><code>=</code> <code>open</code><code>(test_file,</code><code>'r'</code><code>) </code><code>#以隻讀的形式打開檔案</code>
<code>read_test </code><code>=</code> <code>opentest.read() </code><code>#把檔案内容儲存在opentest變量</code>
<code>print</code><code>(read_test)</code>
不管閱讀什麼檔案,Python閱讀時候有個光标,它是用來記錄你讀取到哪裡的一個虛體,
等你下次來讀取檔案的時候,就會從這個光标開始讀起,除非你關閉檔案重新打開這個檔案,
或者你把這個光标調到你想開始讀取的地方,因為上面我們把這個檔案讀完了,你現在再讀
的話就閱讀不了,因為光标在最後了。
<code>print</code><code>(</code><code>"now I want to continue read above file"</code><code>)</code>
<code>read_test1 </code><code>=</code> <code>opentest.read()</code>
<code>print</code><code>(read_test1)</code>
現在我們可以看看這個光标在哪裡
<code>print</code><code>(opentest.tell())</code>
列印出來的結果是91,這就可以說明光标是在第91個字元那裡,如果你想重新閱讀這個檔案,
可以通過以下指令來調整光标
<code>print</code><code>(opentest.seek(</code><code>0</code><code>))</code>
再讓讀這個檔案把内容給read_test1變量
這樣你就又把你的光标調為0了,下面我們再列印我們閱讀的檔案
python是比較笨的,上面寫了隻讀,它就不能寫檔案,如果你把以下代碼的#去掉就會報錯
<code>opentest.write(</code><code>"this is test"</code><code>)</code>
記住每次用完檔案都要關閉檔案。以下代碼是關閉檔案
<code>opentest.close()</code>
下面是寫的操作,不過一般不推薦這個,因為你用w的話python會建立一個檔案,如果這個檔案
存在,它就會把這個檔案覆寫,也就是說檔案的内容會被清空,這是很危險的
<code>opentest </code><code>=</code> <code>open</code><code>(test_file,</code><code>'w'</code><code>)</code>
<code>opentest.write(</code><code>"you will found your file'content be clear,and rewrite this!!!"</code><code>)</code>
如果你不想這樣,隻想在檔案最後添加内容的話可以通過以下方法:
<code>opentest </code><code>=</code> <code>open</code><code>(test_file,</code><code>'a'</code><code>)</code>
<code>opentest.write(</code><code>"\nthis is append statement !!!"</code><code>)</code>
執行完這個你可以去看看你的檔案裡面是不是有增加上面的内容
如果我隻想看看前5行的内容怎麼辦呢,其實有兩種方法,不過你的檔案一定要有5行
下面這種是最高效的
<code>count </code><code>=</code> <code>0</code>
<code>opentest </code><code>=</code> <code>open</code><code>(test_file,</code><code>'r'</code><code>)</code>
<code>for</code> <code>i </code><code>in</code> <code>opentest:</code>
<code> </code><code>if</code> <code>count <</code><code>=</code> <code>5</code><code>:</code>
<code> </code><code>count </code><code>=</code><code>+</code><code>1</code>
<code> </code><code>print</code><code>(i)</code>
下面這種是相對比較低效的
<code>for</code> <code>i </code><code>in</code> <code>range</code><code>(</code><code>5</code><code>):</code>
<code> </code><code>print</code><code>(opentest.readline())</code>
為什麼它們會有高低效之分呢,是因為第一種是利用疊代器,每次隻在檔案裡面取
一條資料,用完就删除這個資料,而第二種是把檔案裡面所有的内容都取出來,如
果你的檔案有20G,那你就要等很久,而且你的記憶體一下子放20G也不大可能,是以
一般都用第一種高效方法
本文轉自 周子琪 51CTO部落格,原文連結:http://blog.51cto.com/izhouyu/1965087