Python3之檔案操作file
檔案file
什麼是檔案:
- 檔案是用於資料儲存的單位
- 檔案通常用來長期儲存資料
- 檔案中的資料是以位元組為單位進行儲存的
檔案的操作流程:
- 開啟檔案
- 讀/寫檔案
- 關閉檔案
注意:任何作業系統,一個應用程式同時開啟檔案的數量有最大數限制
檔案一般流程:
f = open(filename, 'xxx') # 開啟檔案
'''這裡是讀寫操作'''
f.close() # 關閉檔案
mode模組字元的含義:
字元 | 含義 |
---|---|
‘r’ | 以只讀方式開啟(預設) |
‘w’ | 以只寫方式開啟,刪除原有檔案內容(如果檔案不存在,則建立該檔案並以只寫方式開啟) |
‘x’ | 建立一個新檔案, 並以寫模式開啟這個檔案,如果檔案存在則會產生”FileExistsError”錯誤 |
‘a’ | 以只寫檔案開啟一個檔案,如果有原檔案則追加到檔案末尾 |
‘b’ | 用二進位制模式開啟 |
‘t’ | 文字檔案模式開啟 (預設) |
‘+’ | 為更新內容開啟一個磁碟檔案 (可讀可寫) |
- 預設是’rt’
- ‘w+b’ 可以實現二進位制隨機讀寫,當檔案開啟時,檔案內容被清空
- ‘r+b’ 以二進位制讀和更新模式開啟檔案,開啟檔案時不會清空檔案內容
- ‘r+’ 以文字模式讀和更新模式開啟檔案,開啟檔案時不會清空檔案內容
python在檔案常用的方法:
方法 | 說明 |
---|---|
F.close() | 關閉檔案(關閉後檔案不能再讀寫會發生ValueError錯誤) |
F.readline() | 讀取一行資料, 如果到達檔案尾則返回空行 |
F.readlines(max_chars=-1) | 返回每行字串的列表,max_chars為最大字元(或位元組)數 |
F.writelines(lines) | 將字串的列表或字串的列表中的內容寫入檔案 |
二進位制檔案操作方法 | |
F.read(size=-1) | 從一個檔案流中最多讀取size個字元(文字檔案)或位元組(二進位制檔案),如果不給出引數,則預設讀取檔案中全部的內容並返回 |
F.write(text) | 寫一個字串到檔案流中,返回寫入的字元數(文字檔案)或位元組數(二進位制檔案) |
F.tell() | 返回當前檔案流讀寫指標的絕對位置(位元組為單位) |
F.seek(offset, whence=0) | 改變資料流讀寫指標的位置,返回新的絕對位置 |
F.flush() | 把寫入檔案物件的快取內容寫入到磁碟 |
檔案的讀操作:
read:讀取檔案的全部內容並原樣輸出
如,當前有檔案myfile.txt:
f = open('myfile.txt')
res = f.read()
print(res)
f.close()
輸出結果是:
f = open('myfile.txt')
res = f.read(3)
print(res)
f.close()
read可以設定讀取字元數:
如:
f = open('myfile.txt')
res = f.read(3)
print(res)
f.close()
列印結果:
你好!
readline:讀取檔案的一行內容,以換行符 ’ \n ’ 分割
還是以上檔案myfile.txt
f = open('myfile.txt')
res = f.readline()
print(res)
f.close()
輸出結果:
/usr/bin/python3.5 /home/.../myfile.py
你好! 我在檔案裡
readlines:讀取檔案的全部內容,以換行符 ’ \n ’ 分割存在列表中
還是以上檔案myfile.txt
f = open('myfile.txt')
res = f.readlines()
print(res)
f.close()
輸出結果:
/usr/bin/python3.5 /home/.../myfile.py
['你好! 我在檔案裡\n', '你好! 我在檔案裡\n', '你好! 我在檔案裡\n', '你好! 我在檔案裡 gh\n', '\n', '你好! 我在檔案裡\n']
以readlines讀取的檔案內容是可迭代物件,可以使用for迴圈遍歷,或直接示意索引下標獲取想要的內容
檔案的二進位制讀取:
現在改了myfile的內容如下:
你好!
aaa
現在以二進位制的形式將這兩行文字讀取出來
f = open('myfile.txt', 'rb') # 開啟方式使用'rb'
res = f.read()
print(res)
f.close()
結果是:
b'\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x81\naaa\n'
檔案的寫操作
write (text) : 將字串寫入到檔案當中
f = open('newfile.txt', 'w') # w :有則開啟並覆蓋原內容,沒有則新建檔案
s = 'dfjhg\nhdgf' # \n 會被解析成換行符
f.write(s)
f.close()
檔案內容:
dfjhg
hdgf
writelines:將列表或列表的內容寫入到檔案(只能是字串)
f = open('newfile.txt', 'w')
L = ['sadf', 'sdf\n', '324\n'] # \n 被解析
f.writelines(L)
f.close()
檔案內容:
sadfsdf
324
我們輸一個不是字串型別的試試:
L = ['sadf', 'sdf\n', '324\n', True] # 把上述列表改成這個
結果出現錯誤:
Traceback (most recent call last):
File "/home/.../file_write_text.py", line 3, in <module>
f.writelines(L)
TypeError: write() argument must be str, not bool
錯誤提示大概是這樣的:寫的內容必須是字串型別,而不是布林型別
以二進位制的形式寫入檔案
f = open('newfile.txt', 'wb') # 使用 wb
L = [b'\xe4\xbd\xa0\xe5\xa5\xbd\xef\xbc\x81\naaa\n'] # \n 被解析
f.writelines(L)
f.close()
檔案內容:
你好!
aaa
也可以使用write寫。
檔案的一些其他操作
flush:強制將快取區的內容寫入檔案
有時候寫著寫著檔案突然斷電等,讓寫操作斷開了,這時沒有寫完的就會放入緩衝區裡,可以使用flush強制寫入檔案,具體寫法如下:
f.write()
f.flush() # 直接在寫後邊加這一句話即可
tell:返回當前檔案流的讀寫位置(從0開始,以位元組為單位)
try:
f = open('mynote.txt', 'rt')
b = f.read(3)
print(b)
print('當前的位置是:', f.tell())
f.close()
except OSError:
print('開啟二進位制檔案失敗')
列印結果:
bbb
當前的位置是: 3
seek:設定檔案的讀寫位置
語法格式:f.seek(偏移量,whence=相對位置)
偏移量:大於0代表向檔案尾方向移動,小於0代表向檔案頭移動
相對位置:
0—–>代表從檔案頭開始偏移
1—–>代表從檔案當前位置開始偏移
2—–>代表從檔案尾開始偏移
如有myfile.txt,內容是:abcdeABCDE1234567890
f = open('myfile.txt', 'rb')
b = f.read(3) # 讀取 3 個字元
print(b)
f.seek(5, 0) # 0 從檔案頭開始移動,5 表示向尾移動,偏移量大小為 5,即開始從‘A’讀
c = f.read(5) # 讀 5 個字元
print(c)
f.seek(2, 1) # 1 表示從當前位置移動,2 表示向尾移動,偏移量大小為 2 ,即從 ‘3’ 開始讀
d = f.read(5) # 向尾讀取 5 個字元
print(d)
f.seek(-15, 2) # 2 表示從尾開始移動,-15 表示向檔案頭移動,偏移量大小為 15,即從'A'開始讀
e = f.read(5)
print(e)
f.close()
執行結果:
b'abc'
b'ABCDE'
b'34567'
b'ABCDE'
本節完
相關文章
- Java : File 檔案類操作Java
- python file 檔案操作筆記Python筆記
- 像操作Room一樣操作SharedPreferences和File檔案OOM
- Python3編碼如何實現檔案操作?Python
- Golang 原始碼學習(一) —— os/file 檔案操作Golang原始碼
- 7、python之檔案操作Python
- Java7 新特性 —— java.nio.file 檔案操作Java
- Java 檔案 IO 操作之 DirectIOJava
- Linux學習之檔案操作Linux
- Java操作PDF檔案之ITextJava
- JAVA程式設計學習記錄(File類檔案操作)Java程式設計
- 優雅的操作檔案:java.nio.file 庫介紹Java
- (十七)Python學習之檔案操作Python
- IO流之 檔案操作字元流字元
- Java審計之檔案操作漏洞Java
- php檔案操作之提取檔案/目錄的名稱PHP
- HTML input file 檔案域HTML
- Java —— 檔案類(File 類)Java
- HTML input file檔案域HTML
- 6.2file寫檔案
- 6.1file讀檔案
- python3之os的基本操作Python
- 如何在Java中使用檔案操作API: java.nio.file.Path?- marcobehlerJavaAPI
- 1.4檔案操作之修改程式配置檔案小應用
- node 之fs 操作檔案 ? 快取Buffer ?快取
- pandas操作txt檔案的方便之處
- 07 Windows批處理之檔案操作Windows
- File Juicer for Mac(檔案提取工具)UIMac
- 檔案伺服器 — File Browser伺服器
- ThunderSoft File Lock for Mac檔案鎖Mac
- 檔案操作
- vivado常規操作之燒寫bit檔案_固化mcs檔案_除錯介面debug之ila與vio的操作除錯
- python3 socket檔案傳輸Python
- python3 大檔案去重Python
- python3執行.sql檔案PythonSQL
- python–模組之os操作檔案模組Python
- java安全編碼指南之:檔案IO操作Java
- Python學習筆記|Python之檔案操作Python筆記