Python 文件操作隨記

一、文件打開-模式

不同模式打開文件操作說明:

個人覺得需要熟知的:

  • +   :可讀、可寫。
  • r    :讀,指針在開頭。不會創建文件。
  • r+  :讀、寫,指針在開頭。不會創建文件。寫內容在結尾累加。
  • w   :寫、創建、覆蓋,指針在開頭。從開頭開始編輯,即原有內容會被刪除。
  • w+ :讀、寫、創建、覆蓋,指針在開頭。從開頭開始編輯,即原有內容會被刪除。
  • a    :寫、創建,指針在結尾。用於追加。新的內容將會被寫入到已有內容之後。
  • a+  :讀、寫、創建,指針在結尾。用於追加。新的內容將會被寫入到已有內容之後。

需要了解的:

  • t    :文本模式 (默認)
    x   :寫模式,新建一個文件,如果該文件已存在則會報錯。
    b   :二進制模式。
    U  :通用換行模式(不推薦)。
    rb  :類似r模式,只是以二進制格式打開。一般用於非文本文件如圖片等。
    rb+:類似r+模式,只是以二進制格式打開。一般用於非文本文件如圖片等。
    wb :類似w模式,只是以二進制格式打開。一般用於非文本文件如圖片等。
    wb+:類似w+模式,只是以二進制格式打開。一般用於非文本文件如圖片等。
    ab  :類似a模式,只是以二進制格式打開。一般用於非文本文件如圖片等。
    ab+:類似a+模式,只是以二進制格式打開。一般用於非文本文件如圖片等。

二、File對象的系列文件操作

文件操作open函數理解:

open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

#file: 必需,文件路徑(相對或者絕對路徑)。
#mode: 可選,文件打開模式
#buffering: 設置緩衝
#encoding: 一般使用utf8
#errors: 報錯級別
#newline: 區分換行符
#closefd: 傳入的file參數類型
#opener:可以通過調用*opener*方式,使用自定義的開啓器。底層文件描述符是通過調用*opener*或者*file*, *flags*獲得的————目前沒搞懂這個參數的作用

直接上操作例子:

fil=open("2.txt","r+") # 讀寫模式a,a+在文件結尾追加;w、w+在文件開頭,原有信息會被刪除;有文件則讀寫,無文件則創建
str1=fil.read(2)  # read(2)當前位置向後讀取兩字節內容
print("寫操作前讀去內容:",str1,"  指針當前位置:",fil.tell())  # tell()或者當前位置
fil.write("0123456789q")  # write()寫操作
fil.write("mmn")
print("寫操作完成後,指針當前位置:",fil.tell())
print()

print("\n文件名稱:",fil.name)
print("文件操作模式:",fil.mode)
print("文件操作是否關閉狀態:",fil.closed)
print()

fil.close()
print("關閉文件操作後,文件操作關閉狀態:",fil.closed)
寫操作前讀去內容:    指針當前位置: 0
寫操作完成後,指針當前位置: 14


文件名稱: 2.txt
文件操作模式: r+
文件操作是否關閉狀態: False

寫操作前讀去內容,讀取長度2: 34   from設爲0,移動3,指針當前位置: 5

seek()函數可以將指針指向指定位置,seek(offset [,from])

說明:from爲1或2時,文件需是按二進制文件模式打開:

fil=open("2.txt","rb+") 
print("文件讀取內容:",fil.read())
# seek(offset [,from])方法改變當前文件的位置。Offset變量表示要移動的字節數。From變量指定開始移動字節的參考位置。

# from爲0將指針重新定位文件開頭
fil.seek(3,0)
print("寫操作前讀去內容,讀取長度2:",fil.read(2),"  from設爲0,移動3,指針當前位置:",fil.tell())

# from設爲1,則使用當前的位置作爲參考位置。
fil.seek(3,1)
print("from設爲1,移動3,指針當前位置:",fil.tell())

# from被設爲2,那麼該文件的末尾將作爲參考位置
fil.seek(-3,2)
print("from設爲2,移動3,指針當前位置:",fil.tell())

fil.close()
print("關閉文件操作後,文件操作關閉狀態:",fil.closed)



文件讀取內容: b'0123456789qmmn'
寫操作前讀去內容,讀取長度2: b'34'   from設爲0,移動3,指針當前位置: 5
from設爲1,移動3,指針當前位置: 8
from設爲2,移動3,指針當前位置: 11
關閉文件操作後,文件操作關閉狀態: True

文件內容讀取補充

import sys

fil=open("2.txt","r+")
print ("讀取整行的數據爲: ",fil.readline())
print ("讀取下一行的數據爲: ",fil.__next__())
print ("read讀取的數據爲: ",fil.read())

# 重新設置文件讀取指針到開頭
fil.seek(0, 0)
lines = fil.readlines()
print ("lines讀取的數據爲: %s" % (lines))
print ("lines[2]讀取的數據爲: ",lines[2])  # 從0開始算位,即2則是第三個數
print ("lines讀取的數據行數爲: ",lines.__len__())
for idx in lines:
    sys.stdout.write(idx)
# print(idx.replace('\n',''))
print()
print ("位置:",fil.tell())

fil.close()

文件內容:
a6
b5
c4
d3
e2
f1
g7

 運行結果:

讀取整行的數據爲:  a6

讀取下一行的數據爲:  b5

read讀取的數據爲:  c4
d3
e2
f1
g7
lines讀取的數據爲: ['a6\n', 'b5\n', 'c4\n', 'd3\n', 'e2\n', 'f1\n', 'g7']
lines[2]讀取的數據爲:  c4

lines讀取的數據行數爲:  7
a6
b5
c4
d3
e2
f1
g7
位置: 26

三、OS對象提供對文件目錄操作

import os

# 重命名文件
os.rename("readT.txt","2.txt")

# 刪除文件
os.remove("1.txt")

# 創建文件夾3
os.mkdir("3")

# 獲取當前目錄
print(os.getcwd())

# 修改當前目錄
os.chdir("D:\3")

# rmdir()方法刪除目錄,目錄名稱以參數傳遞。
os.rmdir("3")

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章