復習 使用for、while循環遍歷文件,數據類型轉換
通過內置函數open打開文件,看一下open函數解釋:
打開文件
返回的是一個文件對象
fd = open('/tmp/tmp.txt')
查看他的方法:
關閉文件:
fd.close()
向文件內寫入:
fd = open('/tmp/tmp.txt', 'w')
這樣打開文件等於重寫文件,文件原有的內容就覆蓋掉了
fd.write("a")
這樣寫入文件,寫入文件後不能查看到,我們必須把他關閉:
fd.close()
關閉之後,就可以查看到文件內的信息了。
追加內容,使用 a:
fd = open("/tmp/tmp.txt", "a") fd.write('456/n') fd.close()
讀文件:
fd = open("/tmp/tmp.txt")
默認不寫是 r 模式,下面讀取文件內容read函數:
fd.read() '123\n456\n'
默認是從第一個字符,讀到最後一個字符,讀完整個文件
讀完之後指針跑到了整個文件的最後,所以再次運行讀:
fd.read() ''
只返回空了。
fd.read(2) '12'
表示讀兩個字符,為空時從頭讀到結尾。
讀一行:
fd.readline() '456\n' fd.readline() ''
第二次讀已經沒有第二行了,返回一個空的字符串。
讀多行:
fd.readlines() ['123\n', '456\n']
這個方法,有多少行,讀多少行,並且返回一個list
每一行作為一個元素, 整個文件作為一個列表,反之,
每個元素代表每一行。
總結:
read() 函數返回的是 字符串
readline() 函數返回的是 字符串
readlines() 函數 返回的是 列表
for 循環遍歷文件
fd = open('/tmp/tmp.txt') for line in fd.readlines(): print line,
後面加個 , 號,讓print後面沒有\n
上面那種寫法,由於生成list,如果LIST很大,就會占用很多內存資源,
更節約資源的寫法如下:
fd = open('/tmp/tmp.txt') for line in fd: print line,
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進制
hex(10) '0xa'
查看hex()函數用法:
因為字符串之間不能進行加法運算的,只有數字可以。
有時候要將一些16進制的字符串進行運算,所以要轉換成數字。
十進制轉換為字符串
str(10) '10'
字符串轉換為十進制
int('10')
練習:
計算mac地址的下一個mac地址
查看系統的mac地址
mac地址是16進制
macaddr = '00:0C:29:D1:6F:E9' prefix_mac = macaddr[:-3] ##不包含後兩位的mac地址 last_two = macaddr[-2:] ##取mac地址最後兩位,即E9 plus_one = int(last_two, 16) + 1 ##將最後兩位轉化成10進制,並加1 if plus_one in range(10): ##如果加1後的數字在0-9之間的話 new_last_two = hex(plus_one) [2:] ##將加1的數轉化成16進制,並取0x後面的數字 new_last_two = '0' + new_last_two ##前面判斷了,plus_one是在0-9之間的數字,所以前面加個0 else: new_last_two = hex(plus_one) [2:] if len(new_last_two) == 1: ##判斷單獨字符的形式,即0C這種形式。 new_last_two = '0' + new_last_two new_mac = prefix_mac + ':' + new_last_two ##新的mac地址 print new_mac.upper() ##將mac地址轉為大寫
這個代碼囊括了mac地址最後一位是:03、E9、0C 以這三種類型結尾的情況。
5.數據類型轉換(列表與字典相互轉換)
字符串轉換成列表:
列表轉換成字符串:
字符串的join方法:
字符串轉換成元組:
元組轉換成字符串:
列表轉換成元組:
元組轉換成列表:
字典轉換成列表(items方法)
列表轉換成字典
不是所有的列表和元組可以轉換成字典,只有上面這種形式的元組或列表,可以轉換成字典。
復習 使用for、while循環遍歷文件,數據類型轉換