文件操做的學習筆記。mysql
>>> file = open('/tmp/test.txt','r')sql
>>> file.read()安全
'root:x:0:0:root:/root:/bin/bash\nbin:x:1:1:bin:/bin:/sbin/nologin\ndaemon:x:2:2:daemon:/sbin:/sbin/nologin\nadm:x:3:4:adm:/var/adm:/sbin/nologin\nlp:x:4:7:lp:/var/spool/lpd:/sbin/nologin\nsync:x:5:0:sync:/sbin:/bin/sync\nmysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash\n'bash
>>> file.close() #文件使用完之後要關閉文件,由於文件會佔用資源ide
>>> with open('/tmp/test.txt','r') as f:函數
... print(f.read())學習
... #with語句自動調用了close方法編碼
root:x:0:0:root:/root:/bin/bashspa
bin:x:1:1:bin:/bin:/sbin/nologinunix
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
mysql:x:27:27:MySQL Server:/var/lib/mysql:/bin/bash
read() 一次性讀取全部內容,文件過大,內存容易出問題
read(size) size指定每次最多讀取的字節數,更安全
readline() 每次讀取一行
若是文件很小,read()一次性讀取最方便;若是不能肯定文件大小,反覆調用read(size)比較保險;若是是配置文件,調用readlines()最方便:
#f = open('/Users/michael/gbk.txt', 'r', encoding='gbk', errors='ignore', newline='')
open能夠傳入一些參數:
encoding:指定編碼
errors:處理錯誤的方式,最簡單的是ignore忽略,可是這樣用多了不太好。
newline='':Python能夠識別全部的普通換行符並將其轉換爲單個 \n 字符。 相似的,在輸出時會將換行符 \n 轉換爲系統默認的換行符。 若是你不但願這種默認的處理方式,能夠給 open() 函數傳入參數 newline=''
>>> with open('/tmp/hello.txt','w') as f:
... f.write('hello') #文件寫入
... print('你好',file=f) #print輸入重定向到文件中
...
>>> file.read()
'hello你好\n'
#-- 文件基本操做
output = open(r'C:\spam', 'w') # 打開輸出文件,用於寫
input = open('data', 'r') # 打開輸入文件,用於讀。打開的方式能夠爲'w', 'r', 'a', 'wb', 'rb', 'ab'等
fp.read([size]) # size爲讀取的長度,以byte爲單位
fp.readline([size]) # 讀一行,若是定義了size,有可能返回的只是一行的一部分
fp.readlines([size]) # 把文件每一行做爲一個list的一個成員,並返回這個list。其實它的內部是經過循環調用readline()來實現的。若是提供size參數,size是表示讀取內容的總長。
fp.readable() # 是否可讀
fp.write(str) # 把str寫到文件中,write()並不會在str後加上一個換行符
fp.writelines(seq) # 把seq的內容所有寫到文件中(多行一次性寫入)
fp.writeable() # 是否可寫
fp.close() # 關閉文件。
fp.flush() # 把緩衝區的內容寫入硬盤
fp.fileno() # 返回一個長整型的」文件標籤「
fp.isatty() # 文件是不是一個終端設備文件(unix系統中的)
fp.tell() # 返回文件操做標記的當前位置,以文件的開頭爲原點
fp.next() # 返回下一行,並將文件操做標記位移到下一行。把一個file用於for … in file這樣的語句時,就是調用next()函數來實現遍歷的。
fp.seek(offset[,whence]) # 將文件打操做標記移到offset的位置。whence能夠爲0表示從頭開始計算,1表示以當前位置爲原點計算。2表示以文件末尾爲原點進行計算。
fp.seekable() # 是否能夠seek
fp.truncate([size]) # 把文件裁成規定的大小,默認的是裁到當前文件操做標記的位置。
for line in open('data'):
print(line) # 使用for語句,比較適用於打開比較大的文件
open('f.txt', encoding = 'latin-1') # Python3.x Unicode文本文件