(十七)Python學習之檔案操作

Foley_Zhao發表於2019-01-27

(十七)Python學習之檔案操作

一、檔案操作流程
1.開啟檔案,得到檔案控制程式碼並賦值給一個變數;
2.通過控制程式碼對檔案進行操作;
3.關閉檔案。

二、開啟檔案的模式
1.檔案控制程式碼 = open(‘檔案路徑’, ‘模式’)
模式可以是以下方式以及他們之間的組合:‘r’, ‘w’, ‘a’ , ‘b’, ‘t’, ‘+’, ‘U’

(1)開啟檔案的模式有(預設為文字模式):

r :只讀模式(預設模式,檔案必須存在,不存在則丟擲異常)
w:只寫模式(不可讀,不存在則建立,存在則清空內容)
a: 之追加寫模式(不可讀,不存在則建立,存在則只追加內容)

(2)對於非文字檔案,我們只能使用b模式,"b"表示以位元組的方式操作(而所有檔案也都是以位元組的形式儲存的,使用這種模式無需考慮文字檔案的字元編碼、圖片檔案的jgp格式、視訊檔案的avi格式等)

rb:只讀模式(預設模式,檔案必須存在,不存在則丟擲異常)
wb:只寫模式(不可讀,不存在則建立,存在則清空內容)
ab: 之追加寫模式(不可讀,不存在則建立,存在則只追加內容)
注意:以b方式開啟時,讀取到的內容是位元組型別,寫入時也需要提供位元組型別,不能指定編碼;

(3)"+" 表示可以同時讀寫某個檔案

r+:讀寫(可讀,可寫)
w+:寫讀(可讀,可寫)
a+:寫讀(可讀,可寫)

(4)瞭解部分

x:只寫模式(不可讀;不存在則建立,存在則報錯)
x+:寫讀(可讀,可寫)
xb:以位元組的方式只寫模式(不可讀;不存在則建立,存在則報錯)

三、基本的操作檔案的方法
1.read():讀取所有內容,游標移動到檔案末尾;

f = open('1', 'r', encoding="UTF-8")
data = f.read()
print(data)

在這裡插入圖片描述
在這裡插入圖片描述
2.readline():讀取一行內容,游標移動到第二行首部;

f = open('1', 'r', encoding="UTF-8")
data1 = f.readline()
data2 = f.readline()
print(data1)
print(data2)

在這裡插入圖片描述
3.readlines():讀取每一行內容;存放於列表中;

f = open('1', 'r', encoding="UTF-8")
data = f.readlines()
print(data)

在這裡插入圖片描述
4.write():對檔案寫,需要自己寫換行符(針對文字模式的寫,不需要字元轉換;針對b模式的寫,需要字元轉換);

f = open('1', 'w', encoding="UTF-8")
f.write('HELLO\nhhh')
f.close()
f = open('1', 'wb')
f.write('HELLO\nhhh'.encode("UTF-8"))
f.close()

結果皆為如下:
在這裡插入圖片描述
5.writelines():以列表的形式對檔案寫,需要自己寫換行符(針對文字模式的寫,不需要字元轉換;針對b模式的寫,需要字元轉換);

f = open('1', 'w', encoding="UTF-8")
f.writelines(['aaa\n', 'bbb\n', 'ccc\n'])
f.close()

在這裡插入圖片描述

f = open('1', 'wb')
f.writelines([bytes('aaa\n', encoding='utf-8'), 'bbb\n'.encode('utf-8')])
f.close()

在這裡插入圖片描述
6.readable():判斷檔案是否可讀;
7.writable():判斷檔案是否可讀;
8.closed:判斷檔案是否關閉;
9.encoding:返回檔案檔案開啟使用的編碼;如果檔案開啟模式為b,則沒有該屬性;
10.flush():立刻將檔案內容從記憶體刷到硬碟;
11. name:返回檔案的檔名;

四、檔案內游標的移動
1.read(n):

(1)檔案開啟方式為文字模式時,代表讀取n個字元;
(2)檔案開啟方式為b模式時,代表讀取n個位元組;

2.tell():返回游標所在的位置;
3.seek():控制游標的移動(0:絕對位置移動,1:相對位置移動,2:末尾計起移動)其中1和2必須在b模式下進行,但無論哪種模式,都是以bytes為單位移動的;

f = open('1', 'rb')
ofs = 10
print(f.tell())
f.seek(ofs, 0)
print(f.tell())
f.seek(ofs, 1)
print(f.tell())
f.seek(ofs, 0)
print(f.tell())
f.seek(ofs, 2)
print(f.tell())

在這裡插入圖片描述
4.truncate():截斷檔案(檔案的開啟方式必須可寫,但是不能用w或w+等方式開啟,因為那樣直接清空檔案了,所以truncate要在r+或a或a+等模式下測試效果);

f = open('1', 'r+')
data = f.truncate(10)
print(data)
f.close()

執行前:
在這裡插入圖片描述
執行後:
在這裡插入圖片描述

相關文章