天天看點

複習 使用for、while循環周遊檔案,資料類型轉換

1. python通路檔案

通過内置函數open打開檔案,看一下open函數解釋:

打開檔案

傳回的是一個檔案對象

<code>fd </code><code>=</code> <code>open</code><code>(</code><code>'/tmp/tmp.txt'</code><code>)</code>

檢視他的方法:

關閉檔案:

<code>fd.close()</code>

向檔案内寫入:

<code>fd </code><code>=</code> <code>open</code><code>(</code><code>'/tmp/tmp.txt'</code><code>, </code><code>'w'</code><code>)</code>

這樣打開檔案等于重寫檔案,檔案原有的内容就覆寫掉了

<code>fd.write(</code><code>"a"</code><code>)</code>

這樣寫入檔案,寫入檔案後不能檢視到,我們必須把他關閉:

關閉之後,就可以檢視到檔案内的資訊了。

追加内容,使用 a:

<code>fd </code><code>=</code> <code>open</code><code>(</code><code>"/tmp/tmp.txt"</code><code>, </code><code>"a"</code><code>)</code>

<code>fd.write(</code><code>'456/n'</code><code>)</code>

讀檔案:

<code>fd </code><code>=</code> <code>open</code><code>(</code><code>"/tmp/tmp.txt"</code><code>)</code>

預設不寫是 r 模式,下面讀取檔案内容read函數:

<code>fd.read()</code>

<code>'123\n456\n'</code>

預設是從第一個字元,讀到最後一個字元,讀完整個檔案

讀完之後指針跑到了整個檔案的最後,是以再次運作讀:

<code>''</code>

隻傳回空了。

<code>fd.read(</code><code>2</code><code>)</code>

<code>'12'</code>

表示讀兩個字元,為空時從頭讀到結尾。

讀一行:

<code>fd.readline()</code>

<code>'456\n'</code>

第二次讀已經沒有第二行了,傳回一個空的字元串。

讀多行:

<code>fd.readlines()</code>

<code>[</code><code>'123\n'</code><code>, </code><code>'456\n'</code><code>]</code>

這個方法,有多少行,讀多少行,并且傳回一個list

每一行作為一個元素, 整個檔案作為一個清單,反之,

每個元素代表每一行。

總結:

read() 函數傳回的是 字元串

readline() 函數傳回的是 字元串

readlines() 函數 傳回的是 清單

for 循環周遊檔案

<code>for</code> <code>line </code><code>in</code> <code>fd.readlines():</code>

<code>    </code><code>print</code> <code>line,</code>

後面加個 , 号,讓print後面沒有\n

上面那種寫法,由于生成list,如果LIST很大,就會占用很多記憶體資源,

更節約資源的寫法如下:

<code>for</code> <code>line </code><code>in</code> <code>fd:</code>

fd是一個檔案對象,for循環對檔案做周遊,周遊一次,取一行

這樣就不會占用記憶體資源。

用for循環做周遊,其實就相當于使用next()函數

next()一次隻取一行

2. while循環周遊檔案

while 循環周遊檔案

學之前,先了解fd.readline(),它是一行一行讀,最後傳回空字元串;

while是需要條件的,通過最後一行傳回空的條件來退出循環:

使用 with open 方法打開檔案執行完畢後會自動關閉

就不需要使用close關閉檔案了

判斷最後如果line是空的話就break,不是的話就print line

python2.6以後的版本支援這種寫法。

3.統計系統剩餘記憶體

用free 指令檢視記憶體

其實使用free指令也是檢視系統中的 /proc/meminfo

寫個程式:

介紹一個字元串的方法:

str.startswith

檢視介紹:

help(str.startswith)

判斷字元串是以什麼字元串開頭的,如果是傳回True,不是傳回False。

找到開頭的字元串後,如何取值?

用字元串的 split 方法,以字元串來分割為清單,再取清單中的元素。

結果是k,我們把結果變為m,total和free都是字元串,要進行轉換

補充:free是字元串,是以比較字元串格式化後的輸出類型:

4.資料類型轉換(計算mac位址)

16進制轉換為10進制

0x省略不寫也可以

10進制轉換成16進制

<code>hex</code><code>(</code><code>10</code><code>)</code>

<code>'0xa'</code>

檢視hex()函數用法:

因為字元串之間不能進行加法運算的,隻有數字可以。

有時候要将一些16進制的字元串進行運算,是以要轉換成數字。

十進制轉換為字元串

<code>str</code><code>(</code><code>10</code><code>)</code>

<code>'10'</code>

字元串轉換為十進制

<code>int</code><code>(</code><code>'10'</code><code>)</code>

練習:

計算mac位址的下一個mac位址

檢視系統的mac位址

mac位址是16進制

<code>macaddr </code><code>=</code> <code>'00:0C:29:D1:6F:E9'</code>

<code>prefix_mac </code><code>=</code> <code>macaddr[:</code><code>-</code><code>3</code><code>]             </code><code>##不包含後兩位的mac位址</code>

<code>last_two </code><code>=</code> <code>macaddr[</code><code>-</code><code>2</code><code>:]                   </code><code>##取mac位址最後兩位,即E9</code>

<code>plus_one </code><code>=</code> <code>int</code><code>(last_two, </code><code>16</code><code>) </code><code>+</code> <code>1</code>           <code>##将最後兩位轉化成10進制,并加1</code>

<code>if</code> <code>plus_one </code><code>in</code> <code>range</code><code>(</code><code>10</code><code>):                    </code><code>##如果加1後的數字在0-9之間的話</code>

<code>    </code><code>new_last_two </code><code>=</code> <code>hex</code><code>(plus_one) [</code><code>2</code><code>:]            </code><code>##将加1的數轉化成16進制,并取0x後面的數字</code>

<code>    </code><code>new_last_two </code><code>=</code> <code>'0'</code> <code>+</code> <code>new_last_two           </code><code>##前面判斷了,plus_one是在0-9之間的數字,是以前面加個0</code>

<code>else</code><code>:</code>

<code>    </code><code>new_last_two </code><code>=</code> <code>hex</code><code>(plus_one) [</code><code>2</code><code>:]</code>

<code>    </code><code>if</code> <code>len</code><code>(new_last_two) </code><code>=</code><code>=</code> <code>1</code><code>:               </code><code>##判斷單獨字元的形式,即0C這種形式。</code>

<code>        </code><code>new_last_two </code><code>=</code> <code>'0'</code> <code>+</code> <code>new_last_two</code>

<code>new_mac </code><code>=</code> <code>prefix_mac </code><code>+</code> <code>':'</code> <code>+</code> <code>new_last_two            </code><code>##新的mac位址</code>

<code>print</code> <code>new_mac.upper()                  </code><code>##将mac位址轉為大寫</code>

這個代碼囊括了mac位址最後一位是:03、E9、0C 以這三種類型結尾的情況。

5.資料類型轉換(清單與字典互相轉換)

字元串轉換成清單:

清單轉換成字元串:

字元串的join方法:

字元串轉換成元組:

元組轉換成字元串:

清單轉換成元組:

元組轉換成清單:

字典轉換成清單(items方法)

清單轉換成字典

不是所有的清單和元組可以轉換成字典,隻有上面這種形式的元組或清單,可以轉換成字典。

本文轉自 聽丶飛鳥說 51CTO部落格,原文連結:http://blog.51cto.com/286577399/2046268