天天看點

python之檔案的基本操作

<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 &lt;</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