data = f.read()
說明一下
open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True)
,這個函數我們常用的參數為
file
,
mode
和
encoding
。
file
: 讀取的檔案路徑
encoding
: 返回的數據採用何種編碼
mode
如下表格:
看看下面兩個
讀檔
的差別吧?能夠用
for
迴圈去讀取檔案的每一行,也可以用
read()
得到所有檔案內容。
with open('myTxtFIle.txt', 'r') as f:
data = f.read()
print(data)
print('------------------')
with open('myTxtFIle.txt', 'r') as f:
for line in f:
print(line)
print('------------------')
假設要寫入呢?使用帶有w模式的open()函數,若之前文件內容存在則清除並覆蓋掉:
with open('writeSomething.txt', 'w') as f:
f.write('hello\n')
f.write('world')
執行後,可以看到目錄下建立了一個writeSomething.txt檔案,內容為:
hello
world
假設今天是要在文件後面添加內容,而不像上一個每次執行都覆蓋掉原本的內容,則是用a就行了:
with open('appendSomething.txt', 'a') as f:
f.write('hello\n')
f.write('world')
能夠寫入為兩行是因為在hello後面加了\n,若沒有\n則會是helloworld哦!
在Unix和Windows中是不一樣的分別是\n和\r\n。默認情況下,Python會統一模式處理換行符。在讀取檔案的時候,Python會識別所有換行符並將其轉換為單個\n字符。在輸出時會將換行符\n轉換為系統默認的換行符。
如果你不希望這種默認的處理方式,可以給open()函數傳入參數newline=''。
with語法會給被使用到的文件創建了一個上下文環境,且區塊結束後會自動關閉,若不使用with,就必須記得手動關閉文件:
f = open('someTextFile.txt', 'rt')
data = f.read()
f.close()
文件的讀/寫會默認使用系統編碼,可以使用sys.getdefaultencoding()來得到。
在大多數都是utf-8編碼。也可以傳遞encoding參數給open()函數:
with open('textFile.txt', 'rt', encoding='latin-1') as f:
再來,要提到一個可能會發生的錯誤:
UnicodeDecodeError: 'ascii' codec can't decode byte ____ in position __: ordinal not in range(128)
這表示指定的編碼不正確。先確認編碼為何,如果編碼錯誤還是在的話,你可以給open()函數傳遞errors='replace'或errors='ignore'參數來處理。
不過這就跟try,except一樣,不是一個良好的解決方式,所以說還是好好確認編碼是什麼吧!
觀樂的時光總是過得特別快,第三天說明了with open的操作,之後也會說如何操作json與csv檔案。還有我如何在爬資料的時候用with opendebug(嗎)XD ,也歡迎大家提供更好的做法~