Day23:檔案操作
在python中對於檔案操作就是讀和寫操作,而訪問檔案的模式有兩種,文字模式和二級制模式。
1.檔案開啟
# 現建立一個hello.txt檔案,然後加入內容hello world
f = open(file='./hello.txt')
result = f.read()
print(result ) #輸出: hello world
f.close()
-
開啟檔案會用到open()函式,語法為:open(name[,mode[,buffering]]);
-
open函式()的檔名是必須的,而模式和緩衝引數都是可選的;
open(file, mode='r', buffering=None, encoding=None, errors=None, newline=None, closefd=True)
- buffering:是指緩衝大小,-1表示預設大小4096,0表示關閉緩衝區, encoding表示編碼方式,None表示預設的編碼方式;
- errors:表示編碼錯誤被捕獲,如果是errors=ignore,那麼出現編碼錯誤將會被忽略;
- newline:表示檔案換行的意思;
- closefd:表示是否關閉檔案時同時關閉檔案描述符;
2.mode模式引數常用值有哪些
-
'r'
:只讀; -
'w'
:只寫,從開頭開始寫,所以會覆蓋檔案的內容; -
'a'
:追加,不會覆蓋檔案內容; -
'x'
:只寫,如果檔案不存在則建立檔案,以只寫方式開啟檔案,保護寫; -
'b'
:二進位制; -
't'
:文字,是預設的模式,可以不寫,一般都是以文字模式開啟檔案; -
'+'
:讀寫; -
'r+'
:給只讀賦予寫的能力; -
'w+'
:給只寫賦予只讀的能力,因為是以只寫的形式開啟檔案,會清空檔案內容,所以不能讀取到內容,只是有了讀的功能;
3.檔案讀取
f = open(file='./hello.txt',mode='w')
result = f.read()
print(result) # hello world
f.write('a') # 如果寫入則會報錯,因為此時是隻讀模式
#
result1 = f.read(3) # 表示檔案讀三個位元組,不給值表示直接讀到EOF
print(result1) # hel
f.close() # 讀取完檔案一定要關閉
-
讀取檔案會用到read()函式,用於從檔案中讀取指定的字元數,如果未給定或為負值則表示讀取所有字元;
-
如果檔案非常大,尤其是大於記憶體時,無法使用read()方法;
4.檔案寫入
w
,x
,a
都是隻寫,t
模式是字元流,按照字元編碼理解,b
是位元組流,位元組操作是bytes型別;+
無法單獨使用,用來增強r
,w
,x
,a
等功能,但是在獲取檔案物件是依然是本身的特性;
# w為只寫模式
f = open(file='./hello.txt', mode='w')
f.write('a')
f.read() # 此時讀就會報錯
f.close()
# x是隻寫,檔案不存在,建立檔案,以只寫方式開啟
f = open('./test.txt', 'x')
# f.read() # 此時讀會報錯
f.write('a')
f.close()
# a只寫,檔案存在,追加內容,檔案不存在,只寫,追加內容
f = open('./test1.txt', 'a')
# f.read() # 此時讀會報錯
f.write('aaa')
f.close()
5.檔案指標
f = open('hello.txt', 'r+')
print(f.tell()) # 檔案的起始位置 0
print(f.read()) # 讀檔案所有的內容
print(f.tell()) # EOF,也就是最後一個字元是幾
print(f.seek(3)) # 偏移兩個位元組
print(f.read())
f.close()
f = open('test.txt', 'rb+')
print(f.tell()) # 檔案的起始位置0
print(f.read()) # 讀檔案所有的內容
print(f.tell()) # EOF,也就是最後一個字元
print(f.seek(2)) # 偏移兩個位元組
print(f.read())
f.write(b'ni hao')
f.seek(2,2) # 二級制模式下,seek(offset, whence=0) 可以給whence傳遞1, 2 或 0, 0表示檔案從頭開始, 1表示從當前位置開始,2表示從檔案末尾EOF開始
f.seek(1,1)
f.write(b'ni hao')
f.flush() # 將快取重新整理到檔案
f.write(b'ni hao')
f.close() # 檔案控制程式碼關閉的時候,會將快取重新整理到檔案
-
mode為
r
的時候,指標的起始點在0; -
mode為
a
的時候,指標的起始點在EOF,檔案末尾; -
tell()函式:顯示指標的當前位置;
-
seek()函式:移動檔案指標的位置,引數offset指的是偏移的位元組;
-
flush()函式:將快取重新整理到檔案;
-
close()函式:關閉檔案;
6.檔案行讀取
import io
f = open('hello.txt', 'r+')
print(io.DEFAULT_BUFFER_SIZE) # 8192
print(f.readline(), '第一行') # 讀取一行
print(f.readline(), '第二行')
print(f.readlines()) # 讀取所有行,且返回列表
-
readline() 函式用於從檔案讀取整行(包括 “\n” 字元),如果指定了一個非負數的引數,則返回指定大小的位元組數(包括 “\n” 字元);
-
readlines() 函式用於讀取所有行,且返回值為列表形式;
7.open 檔案上下文管理器
with open('test.txt',mode='w') as f:
f.write('nihao')
-
使用with 關鍵字來實現上下文管理器;
-
通過上下文管理的方式開啟檔案,在檔案末尾會自動執行關閉語句,不需要寫f.close()來關閉檔案了;
參考:俠課島(9xkd.com)Python同學計劃
相關文章
- 檔案操作
- C檔案與檔案的操作
- lua檔案操作
- 檔案IO操作
- 2.8檔案操作
- Python操作檔案Python
- 檔案操作(下)
- Go檔案操作Go
- 05 檔案操作
- linux 檔案操作Linux
- Linux----12 檔案與檔案操作Linux
- python_檔案操作Python
- pandas操作csv檔案
- 1.4.0 Python檔案操作Python
- Python 檔案操作(一)Python
- Git檔案操作(二)Git
- 10.檔案操作
- python 操作整理檔案Python
- bcftools操作vcf檔案
- Java 檔案 IO 操作Java
- Python的檔案操作Python
- 檔案操作類FileUtil
- 9. 檔案操作
- C# 檔案操作C#
- 5.檔案操作
- Linux檔案IO操作Linux
- 28 檔案基本操作
- Python檔案的操作Python
- 【淺出 PHP】PHP 檔案操作 寫檔案PHP
- iOS 檔案操作簡介iOS
- python對檔案的操作Python
- python3.7 檔案操作Python
- Scala檔案操作詳解
- 7、python之檔案操作Python
- python--檔案操作指南Python
- Python 檔案、目錄操作Python
- Python基礎——檔案操作Python
- python檔案讀寫操作Python