打開文件的操作
數據是寫在文件里面的,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=utf-8,否則會亂碼 file = open('new_file.txt','w',encoding= 'utf-8')#添加編碼格式encoding='utf-8' #寫入數據 file.write('這是一篇很好的文章') #關閉文件 file.close()
- 使用格式說明
- 使用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 讀取每一行,會存放在列表當中,每一行的數據就是列表的一個元素
read 讀取的數據是一整個字符串
#使用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()