文件對象:
with open('/etc/hosts') as f:
這樣打開文件不用使用X.close()手動關閉文件,使用with打開文件,在文件使用結結束後會自動關閉。
r 以讀方式打開(文件不存在則報錯)
w 以寫方式打開(文件存在則清空,不存在則創建)
a 以追加方式打開(必要時創建新文件)
r+ 以讀寫方式打開
w+ 以讀寫方式打開
a+ 以讀寫方式打開
open、file打開文件,一般用open
read讀
readline讀一行
readlines 讀全部
文件寫入:
>> file = open('/tmp/123.txt', 'w') #以寫方式打開文件
>> file.write('123456') #寫入字符串
6
>> file.write('\n') #寫入回車,默認是沒有回車的
1
>> file.close() #關閉文件
文件指針:
文件內移動:
seek(offset[,whence]) :移動文件指針到不同的位置
offset是相對於某個位置的偏移量
whence的值,0表示文件開頭,1表示當前位置,2表示文件的結尾
tell():返回當前文件指針的位置
python2中支持從直接將文件指針移動到倒數第三個字符,
>>> f = open('/etc/hosts')
>>> f.tell() #查看當前文件指針的位置
0
>>> f.seek(-3, 2) #將文件指針移動到倒數第三個字符,-3代表偏移量,2代表文件末尾
>>> f.read()
'n6\n'
python3中文件打開方式必需以N + b的方式打開,纔可以使用指針從後往前移動
>>> f = open('/opt/hosts', 'rb')
>>> f.tell()
0
>>> f.seek(-3,2)
155
>>> f.read()
b'n6\n'
適用與日誌按時間節點截取的場景:
一點文件寫入123數據到azj文件,
讀取文件最後的文件指針位置到end當中,將文件內容讀取到data中。
兩點文件寫入456數據到azj文件,
將文件指針移動到文件2點的位置並將文件指針位置賦值給b,
讀取1點到2點之間的文件內容:
>>> data2 = f.read(b - end) #讀取文件上次結束位置到第二次結束位置的內容
>>> data2
'456\n'
三點文件寫入789數據到azj文件。
此時文件指針在文件2點時的位置,將剩餘文件內容讀取到data3中:
>>> data3 = f.read() #讀取文件剩餘的內容
>>> data3
'789\n'
>>> f = open('/tmp/azj.txt') #首先輸入123到azj。文件中
>>> f.seek(0, 2) #把文件指針移動到行尾
4
>>> end = f.tell() #把文件指針位置賦值
>>> f.seek(0, 0) #文件指針返回開頭位置
0
>>> data = f.read(end) #讀取文件開頭到剛纔行尾文件指針的文件內容
>>> data
'123\n'
>>> f.seek(0, 2) #寫入456到azj文件,將文件指針移動到文件末尾
8
>>> b = f.tell() #將文件指針位置賦值
>>> f.seek(end, 0) #將文件指針移動到上次結束位置
4
寫入789到azj文件
>>> data2 = f.read(b - end) #讀取文件上次結束位置到第二次結束位置的內容
>>> data2
'456\n'
>>> data3 = f.read() #讀取文件剩餘的內容
>>> data3
'789\n'
文件寫入:
以r+的方式打開文件時,寫入文件是以覆蓋的形式寫入。
標準文件:
程序一執行,就可以訪問三個標準文件
標準輸入:一般是鍵盤,使用sys.stdin
sys.stdin.<兩次TAB鍵>
>>> sys.stdin.readline()
asdf
'asdf\n' #和input差不多,區別是會讀取到回車的動作
標準輸出:一般是顯示器緩衝輸出,使用sys.stdout
sys.stdout.<兩次TAB鍵>
>>> sys.stdout.write('12344')
123445 #返回12344字符串並返回字符串的長度5
>>> sys.stdout.writelines('123')
123>>> #返回字符串本身,沒有回車
標準錯誤:一般是顯示器的非緩衝輸出,使用sys.stderr
sys.stdeer.<兩次TAB鍵>
>>> sys.stderr.writelines('123') #標準錯誤輸出
123>>>