文件操做linux
流程:
1:打開文件,獲得文件句柄並賦值給一個變量
2:經過句柄對文件進行操做
3:關閉文件
模式解釋
r(讀) , w(寫) ,a(附加)r+(讀寫的讀), w+(讀寫的寫),a+(讀附加的附加)網絡
b表示以二進制模式打開文件(3.0裏網絡傳輸只能用此模式,或者視頻音頻等)
以上模式以二進制模式表示爲:rb,wb,ab,rb+,wb+,ab+
如何將文本以二進制寫入文件
f = open('file','wb')
f.write('hello world',encode()) 這裏轉換爲二進制格式寫入文件便可ide
U表示在讀取時,能夠將\r \n \r\n 自動轉換爲\n
寫法:rU 或者 r+U性能
緩衝:
0:禁用緩衝
負數:使用系統默認緩衝
1:只緩衝1行數據
2+:指定緩衝空間大小編碼
打開文件舉例: f1=open('/tmp/passwd','r')spa
方法:
read(): 將文件內容以字符串形式所有讀取。
readable():判斷文件是否可讀。
write():寫文件
writeable():判斷文件是否可寫
flush():刷新手工將內存中的文件內容寫到硬盤上操作系統
readline()用法:讀取一行。
舉例讀取前5行:
for i in range(5):
file.readline()
readlines():將文件內容以列表形式打印(這個方法效率低對大文件)
舉例打印文件前10行:
for index,line in enumerate(f.readlines()):
if index == 9:
break
print(line.strip())
這種方法性能很差,不要用在大文件處理,由於會一次性讀取全部文件內容。指針
tell(): 顯示當前指針在文件中位置(字節顯示)
seek(offset[whence]) 指針偏移
whence:偏移量起點
0:從文件頭 (默認位置)
1:從當前位置
2:從文件尾部 例如:f1.seek(0,2)
offset:偏移數量
seekable():判斷文件中的光標是否能夠移動,能夠返回True,不然返回False.(linux中一切皆文件,終端設備在系統裏也是文件,可是光標是不能夠移動的。)
encoding:打印文件的編碼
errors:異常處理
fileno():返回文件句柄在內存中的編號(這個編號屬於操做系統內部IO),通常不使用這個方法(忘掉它吧)。
name:調用當前文件名稱
isatty():看終端設備(打印機,屏幕等終端),用於底層交互。
close(): 關閉文件
closed:判斷文件是否關閉,返回(True/False)
truncate():截斷,若是不帶參數會清空文件。帶參數如:truncate(20):表示從文件開頭日後截取20個字符。須要以a模式打開文件。code
注意:文件以r+模式打開文件,讀取文件是按照正常方式從頭開始讀取,但中途寫入仍是會直接寫到文件末尾。視頻
打開讀取文件效率最高的寫法:
count = 0
for line in f:
if count == 9:
print('----分隔符-----')
print(line.strip())
continue
print(line.strip())
count += 1
這種方法是內存只保存一行,讀取的一行覆蓋上一行原理。
文件修改方法:
只有同時打開2個文件,第一個是須要讀取的源文件,第二個是寫入內容的新文件,過程是讀取源文件每行數據,若是符合修改需求,則修改,而後將每行數據寫入新文件中。
1 src_file = open('源文件名',encoding='utf-8') 2 dst_file = open('文件名.bak','w',encoding='utf-8') 3 4 for line in src_file: 5 if '準備修改的字符串' in line.strip(): 6 #注意:這裏修改一行後必定要從新指定到一個變量 7 line = line.replace(準備修改的字符串,替換的字符串) 8 print(line.strip()) 9 dst_file.write(line) 10 src_file.close() 11 dst_file.close()
with : 能夠自動在with執行完後自動關閉打開的文件
with open('file1','r',encoding='utf-8') as f1 ,\
open('file2','r',encoding='utf-8') as f2: #使用with能夠同時打開多個文件功能,寫法建議參考這裏。
....
小技巧動態輸出顯示進度條import sys,timefor i in range(10): sys.stdout.write('#') 動態輸出到屏幕,不會換行 sys.stdout.flush() 刷新屏幕,顯示動態輸出 time(0.1) 爲查看方便