咱們之前操做的數據都是在程序中提早寫死的, 可是在實際開發中這是遠遠不夠的.不少時候咱們都須要對存儲在計算中文件內的數據進行處理, python 提供了一系列的對文件操做的 apipython
計算機的文件,就是存在在某種長期存儲設備上的一段數據linux
長期存儲設備包括:硬盤,U盤,移動硬盤,光盤。。。api
你們應該據說過一句話:「好記性不如爛筆頭」。函數
不只人的大腦會遺忘事情,計算機也會如此,好比一個程序在運行過程當中用了九牛二虎之力終於計算出告終果,試想一下若是不把這些數據存放起來,相比重啓電腦以後,「哭都沒地方哭了」編碼
可見,在把數據存儲起來有作麼大的價值3d
使用文件的目的:指針
就是把一些存儲存放起來,可讓程序下一次執行的時候直接使用,而沒必要從新制做一份,省時省力code
在計算機中,文件是以二進制的方式保存在磁盤上的視頻
文本文件和二進制文件對象
文本文件
可使用文件編輯軟件查看
本質上仍是一個二進制文件
例如:python的源程序
二進制文件
保存的內容不是給人直接閱讀的,而是提供給其餘軟件使用的
例如:圖片文件,音頻文件,視頻文件等等
二進制文件不能使用文本編輯軟件查看
在計算機中要操做文件的套路很是固定,包含如下三個步驟
打開文件(首先要先找到文件並打開.)
讀,寫文件
讀:將文件內容讀入內存
寫:將內存內容寫入文件
關閉文件
在python中要操做文件須要記住如下函數
序號 | 函數/方法 | 說明 |
---|---|---|
01 | open | 打開文件,而且返回文件操做對象 |
02 | read | 將文件內容讀取到內存 |
03 | write | 將制定內容寫入文件 |
04 | close | 關閉文件 |
open 函數負責打開文件,而且返回文件對象
read/write/close 三個方法都須要經過文件對象來調用
打開文件使用 python 內置的open()
函數
open()
函數默認以只讀方式打開文件,而且返回一個文件對象file object`(文件對象), 最經常使用的就是使用 3 個參數(還要其餘的可選參數)
語法格式
file = open(filename[, mode, encoding]) # ("文件名", "訪問方式","編碼")
參數說明:
第一個參數:filename
是指的文件名.
也包含路徑. 路徑能夠是相對路徑, 也能夠是絕對路徑. 不過路徑分隔符要注意:window 下是反斜槓
\
和 mac 和 linux 下是/
第二個參數:mode
是打開文件的模式. 可選. 默認是隻讀和文本模式(rt
).支持以下模式:
第三個參數:encoding
,若是是文本文件, 則最好指定一下文本文件的編碼.不然對一些非ascii
字符沒有辦法解碼. 目前通常文件都使用utf-8
返回值:返回值就是一個文件對象. 使用這個文件的一些 api 能夠操做文件內容
示例代碼:
file = open("test.txt", "rt", encoding="utf-8") # 默認就是 rt 表示對只讀文本文件, 而且指定文件編碼.
經常使用的文件打開模式mode
序號 | 訪問方式 | 說明 |
---|---|---|
01 | r | 等價於rt,以只讀方式打開文件。文件的指針將會放在文件的開頭,這是默認模式。若是文件不存在,拋出異常 |
02 | w | 等價於wt,以只寫的方式打開文件(沒有讀的權限)。若是文件存在會被覆蓋(會先把文件的長度置 0 (文件截斷爲0))。若是文件不存在,建立新文件 |
03 | a | 等價於at,以追加方式打開文件。若是文件已經存在,文件指針將會放在文件的結尾。若是文件不存在,建立新文件進行寫入 |
04 | r+ | 等價於r+t,以讀寫方式打開文件。文件的指針將會放在文件的開頭。若是文件不存在,拋出異常 |
05 | w+ | 等價於w+t,以讀寫方式打開文件。若是文件存在會被覆蓋。若是文件不存在,建立新文件 |
06 | a+ | 以覆寫方式打開文件。若是該文件已存在,文件指針將會訪問文件的結尾。若是文件不存在,建立新文件寫入 |
頻繁的移動文件指針,會影響文件的讀寫效率,開發中更多的時候會以只讀,只寫的方式來操做文件
open 函數的第一個參數是要打開的文件名(文件名區分大小寫)
若是文件存在,返回文件操做對象
若是文件不存在,會拋出異常
read 方法能夠一次性讀入並返回文件的全部內容
close 方法負責關閉文件
若是忘記關閉文件,會形成系統資源消耗,並且會影響到後續對文件的訪問
注意:方法執行後,會把文件指針移動到文件的末尾
# 1.打開 file = open("文件路徑") # 2.讀取 text = file.read() print(text) # 3.關閉 file.close()
提示:在開發中,爲了防止忘記關閉文件,一般會編寫打開和關閉的代碼,再編寫中間針對文件的讀/寫操做
read 的幾種方式
使用read(num)能夠從文件中讀取數據,num表示要從文件中讀取的數據的長度(單位是字節),若是沒有傳入num,那麼就表示讀取文件中全部的數據
讀取一行
read 方法默認會把文件的全部內容一次性讀取到內存
若是文件太大,對內存的佔用會很是嚴重,可使用 readline 方法
readline 方法能夠一次讀取一行內容
方法執行後,會把文件指針移動到下一行,準備再次讀取
讀取大文件的正確姿式
# 打開文件 file = open("文件名") # 循環讀取文件 while True: # 讀取一行內容 text = file.readline() # 判斷是否讀到內容 if not text: break # 每讀取一行的末尾已經有了一個"\n" print(text, end = "") # 關閉文件 file.close()
使用for ... in...讀取 效率更高
# 使用for循環進行讀取更效率 file = open('demo1.txt', 'r+t', encoding='utf-8') for line in file: print(line)
使用readlines()進行讀取,會把讀取的每行內容放在一個列表當中
file = open('demo1.txt', 'r+t', encoding='utf-8') # 使用readlines()進行讀取,會把讀取的每行內容放在一個列表當中 print(file.readlines())
write(string)
向文件中寫入字符串, 並返回寫入的字符的個數.
file = open("new.txt", "w+", encoding="utf-8") count = file.write("你好啊abc") print(count)
注意:
r+
, 則文件不存在會拋出異常.w+
, 文件不存在會自動建立文件, 並寫入a+
, 追加的方式寫入文件若是是寫入的其餘類型的數據, 則寫以前須要手動轉換
根據你打開文件的模式, 來決定究竟是轉成字符串仍是轉成字節對象
file = open("new.txt", "w+t", encoding="utf-8") nums = ("a", "b", "你 好", 30) file.write(str(nums))
文件內容:
writelines()
把存儲字符串的列表直接寫入到文件中
寫入的時候不會自動幫你格式化, 會把每一個字符串元素挨個寫在一塊兒, 你應該在寫入以前自行處理好格式
file = open("new.txt", "w+t", encoding="utf-8") nums = ("a", "b", "你好") file.writelines(nums)
文件指針(瞭解)
文件指針 標記從哪一個位置開始讀取數據
第一次打開文件時,一般文件指針會指向文件的開始位置
當執行了read方法後,文件指針會移動到讀取內容的末尾
tell(), 和 seek()
tell()
返回文件指針在當前文件中的位置. 返回的值是以字節爲單位的.
seek()
設置文件指針的位置
file = open("new.txt", "r+t", encoding="utf-8") print(file.tell()) # 文件打開以後指針位置默認爲 0 print(file.read(1)) print(file.tell()) file.seek(4) print(file.read(1))
關閉文件
爲何要關閉文件:
關閉文件調用文件對象的close()
方法便可.
讀取源文件的數據,寫給目標文件
小文件:使用read(),write()
大文件:使用readline(),write()
文本文件存儲的內容是基於字符編碼的文件,常見的編碼有ASCII編碼,UNICODE編碼等
Python 2.x 默認使用ASCII編碼
Python 3.x 默認使用UTF-8編碼
ASCII編碼
計算機中只有256個ASCII字符
一個ASCII在內存中佔用1個字節的空間
UTF-8 編碼格式
計算機中使用1-6個字節來表示一個UTF-8字符,涵蓋了全部文字。
大多數漢字使用3個字節
[擴展內容]
在Python 2.x中第一行,增長如下代碼,解釋器會以utf-8編碼來處理python文件
# *-* coding:utf8 *-*
也可使用
# coding=utf8
在Python 2.x中,即便指定了文件使用UTF-8
打開文件的時候使用with
關鍵字, 能夠在文件操做完畢以後在合適時間自動關閉文件, 即便發生了異常也能關閉文件.
並且代碼要比處理異常的語句少
with open("new.txt", "r+", encoding="utf-8") as file: print(file.read())