正常的文件操作都分三步走:打開文件,操作文件,關閉文件。
python open() 函數用于打開一個文件,創建一個?file?對象,相關的方法才可以調用它進行讀寫
語法
文件句柄 = open(文件名,模式)
例如:f = open('abc.txt', 'r', encoding='gbk')
r | 以只讀方式打開文件。文件的指針將會放在文件的開頭。這是默認模式。 |
rb | 以二進制格式打開一個文件用于只讀。文件指針將會放在文件的開頭。這是默認模式。 |
r+ | 打開一個文件用于讀寫。文件指針將會放在文件的開頭。 |
rb+ | 以二進制格式打開一個文件用于讀寫。文件指針將會放在文件的開頭。 |
w | 打開一個文件只用于寫入。如果該文件已存在則打開文件,并從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。 |
wb | 以二進制格式打開一個文件只用于寫入。如果該文件已存在則打開文件,并從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。 |
w+ | 打開一個文件用于讀寫。如果該文件已存在則打開文件,并從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。 |
wb+ | 以二進制格式打開一個文件用于讀寫。如果該文件已存在則打開文件,并從開頭開始編輯,即原有內容會被刪除。如果該文件不存在,創建新文件。 |
a | 打開一個文件用于追加。如果該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容之后。如果該文件不存在,創建新文件進行寫入。 |
ab | 以二進制格式打開一個文件用于追加。如果該文件已存在,文件指針將會放在文件的結尾。也就是說,新的內容將會被寫入到已有內容之后。如果該文件不存在,創建新文件進行寫入。 |
a+ | 打開一個文件用于讀寫。如果該文件已存在,文件指針將會放在文件的結尾。文件打開時會是追加模式。如果該文件不存在,創建新文件用于讀寫。 |
ab+ | 以二進制格式打開一個文件用于追加。如果該文件已存在,文件指針將會放在文件的結尾。如果該文件不存在,創建新文件用于讀寫。 |
file 對象方法
- file.read([size]):讀取文件所有內容并返回字符串,參數可加數字,如read(n),n為返回的字符數,單位字符。
- file.readline():返回一行。
- file.readlines([size])?:返回包含size行的列表, size 未指定則返回全部行。
- f.write("hello\n"):如果要寫入字符串以外的數據,先將他轉換為字符串。
- writelines(list) :寫多行,參數為列表
- f.tell():返回一個整數,表示當前文件指針的位置(就是到文件頭的字節數)。
- f.seek(偏移量,[起始位置]):用來移動文件指針。
- 偏移量: 單位為字節,可正可負
- 起始位置: 0 - 文件頭, 默認值; 1 - 當前位置; 2 - 文件尾
- f.close() :關閉文件
- tell() :當前句柄指針,即光標位置
- truncate() :截取文件句柄頭到當前位置的字符串,返回None
- xreadlines() :一行一行讀,3.x版本已放棄此寫法
代碼示例
fh = open('abc.txt','wb+') # 打開一個文件并寫入
fh.tell() # 文件句柄所在位置
fh.write('Life is like a roller coaster,live it,be happy,enjoy life.\n') #寫入一行
fh.writelines(["The best way to make your dreams come true is to wake up.\n","If you're not making mistakes,you're not trying hard enough."]) #寫入多行,參數為列表list
fh.seek(0) # 返回文件句柄頭
fh.readline() # 讀一行
fh.readlines() # 讀所有行,返回列表list
fh.read() # 讀取全部內容,返回字符串
fh.tell() # 讀取當前位置
fh.truncate() # 截取文件句柄頭到當前位置的字符串
fh.close() # 關閉文件句柄
當文件非常大時,要一行一行的讀文件,要用for 循環,如果是配置文件,調用readlines()最方便
fh = open('tfile')
for line in fh:print line
fh.close()
有時我們常常忘記關閉文件句柄,如果不想多寫一個關閉文件句柄的代碼,可以使用with上下文操作(支持同時操作多個文件)
with open('tfile1') as fh1,open('tfile2') as fh2:....
?