Python基本語法 開啟檔案
開啟檔案的操作
資料是寫在檔案裡面的,open file 可以實現 讀取資料 寫入資料
一般的檔案操作步驟:
- 先開啟檔案
- 讀取檔案資料
- 寫入資料
- 關閉檔案
注意:檔案開啟後,最後一定要記得關閉檔案,否則會引起很多問題
1.開啟檔案,使用的方法為open() 內建函式
f=open('檔名稱/檔案路徑')
2.讀取檔案:
f.read() 就可以讀取檔案所有資料(讀取的資料型別為字串)
讀取的方法有:
mode='r' 讀取模式 (一般預設的模式為:讀取模式) 所以,如果是進行檔案讀取,可以預設不傳,但是前提必須是,讀取時,檔案必須存在,否則會報錯
mode='rb' 也是讀取模式,不過一般是以二進位制格式開啟一個檔案,用於讀寫。一般用於非文字檔案,例如圖片
#開啟檔案 f = open('python_test.txt')#如果你讀取的是同一個資料夾下,不需要加路徑,不同檔案下,需要加上詳細的路徑資訊 #讀取資料 data = f.read()#read 讀取出來的資料是字串 print(data)
print(type(data)) #開啟檔案讀取出來的資料為字串型別
#關閉檔案 f.close()
輸出結果為:
<class 'str'>
如果想將返回的字串資料,存放在一個列表裡面,方便後續處理,可以使用之前字串的一個方法,split() 分割
split() 內建函式返回的結果為,字串列表(分割後的引數為字串形式,儲存在列表內)----可以自行實踐
new_data = data.split('\n') #將返回的字串以換行符進行切割儲存 print(new_data)
3.寫入檔案
檔案不存在(就是在一個新的檔案裡面,寫入需要寫入的資料)
- mode='w' 覆蓋模式
- 在w模式下,如果之前沒有這個檔案,將會在傳入的路徑下建立一個新的檔案
#使用預設的mode='r'模式 file=open('data.txt') #執行會報錯 #使用mode='w'模式,寫入除中文以外的字元,可以使用 file=open('data.txt',mode='w')#可以在當前路徑下建立一個新的檔案;data.txt #如果要在檔案裡面寫入中文,需要設定編碼格式 encoding
- 使用格式說明
- 使用open()內建函式開啟檔案,進行操作的過程中,不需要傳入關鍵字mode,只需要傳入對應的讀取模式就行
- 原因是:open函式的原始碼部分,傳入的引數位置:def open(file,mode ='r',buffering = None,encoding = None,......)
- 其中,mode為第二個位置引數,所以可以不用寫,但是其他的需要傳入,不然會報錯,例如,常用的encoding位置引數
- 在w模式下,如果之前沒有這個檔案,將會在傳入的路徑下建立一個新的檔案
注意事項:如果之前已經存在相同名稱的檔案,使用mode='w'模式,會覆蓋之前的檔案內用,所以使用時需要很謹慎
- 如何解決被覆蓋的問題
- mode='a' 追加模式
- 在a模式下,如果之前不存在的檔案,會建立新的檔案,且在每執行一次後,將新寫入的內容追加到文件的最後位置
- mode='b' 二進位制模式 不能單獨使用,要跟r,w組合使用,其中,圖片就是的使用二進位制開啟和儲存的
file = open('你好.png',mode='rb') #讀資料 print(file.read())#打印出一串16進位制的數字 #關閉檔案 file.close()
- mode='t' 文字模式 上面說的mode='r',實際上就是mode='rt',因為預設都是用txt開啟
- mode='+' 加模式 組合使用 r+ :可讀可寫,其中可寫為追加模式
file = open('new_file.txt',mode='r+',encoding= 'utf-8') file.read()#先讀 #寫入資料 file.write('這是一本很有意思的書')#再寫 #關閉檔案 file.close()
4.檔案的操作之 seek
seek:表示游標在哪裡
- 開啟一個檔案時,游標在最開始的位置
- 開啟一個檔案,w+的模式寫入一些資料,但是沒有關閉檔案。再次讀取時,不會讀取到資料,因為此時的游標在最末尾(所以,一定要注意,開啟檔案,操作完成後,一定要關閉檔案,再進行下一步操作)
-
#此操作讀取不到檔案資料 f = open('demo.txt','w+')#'w+'可以同時具備可讀可寫能力 f.write('new line') print(f.read())
#開啟檔案,操作完成後,關閉檔案,再開啟操作,就可以讀取到最新資料 f = open('demo.txt','w+') f.write('new line') f.close() f = open('demo.txt','r') print(f.read()) #結果:new line
5.readlines 讀取每一行,會存放在列表當中,每一行的資料就是列表的一個元素
reed 讀取的資料是一整個字串
#使用read() 讀取全部資料 file=open('data.txt',encoding='utf-8') data=file.read() print(data) print(type(data)) 輸出結果: 這是第一行內容 這是第二行內容 這是第三行內容 <class 'str'> #使用readlines() 讀取資料 data1=file.readlines() print(data1) print(type(data1)) 輸出結果: ['這是第一行內容\n', '這是第二行內容\n', '這是第三行內容'] <class 'list'>
readlines() 方法取出的資料為字串,且儲存在列表當中,且字串末尾存在一個換行符,如果想要將返回的資料取出換行符,可以使用for迴圈進行遍歷,取出每個字串,然後使用字串的strip() 方法,去除字串首尾空格或者是換行符
方法二:使用enumerate() 方法 (可以多多瞭解,工作當中很實用)
file=open('data.txt',encoding='utf-8') data1=file.readlines() print(data1) print(type(data1)) for line,data in enumerate(data1): if line == len(data1)-1: print(data) #根據資料對應的下標位置,獲取對應資料 else: print(data[:-1]) 輸出結果: 這是第一行內容 這是第二行內容 這是第三行內容
6.with語句:可以讓我們節省關閉檔案的操作
首先,工作當中,我們經常遇到一些任務,可能事先需要設定,事後再做清理的工作。對於這種場景,Python的with語句提供了一個非常方便的處理方式。一個很好的例子就是檔案處理,你需要獲取一個檔案控制代碼,從檔案中讀取資料,然後關閉檔案控制代碼(此方法就是防止,書寫過程中,忘記關閉檔案,而導致報錯)
with語句的語法:
with open(file) as filename:
使用方法:
with open('data.txt') as f:
data= f.read()
data1=f.readlines()