Python第九章-文件

文件

1、文件的概念

1.1 文件的概念和做用

咱們之前操做的數據都是在程序中提早寫死的, 可是在實際開發中這是遠遠不夠的.不少時候咱們都須要對存儲在計算中文件內的數據進行處理, python 提供了一系列的對文件操做的 apipython

1.1.1 什麼是文件

計算機的文件,就是存在在某種長期存儲設備上的一段數據linux

長期存儲設備包括:硬盤,U盤,移動硬盤,光盤。。。api

1.1.2 文件的做用:將數據長期保存下來,在須要的時候使用

你們應該據說過一句話:「好記性不如爛筆頭」。函數

不只人的大腦會遺忘事情,計算機也會如此,好比一個程序在運行過程當中用了九牛二虎之力終於計算出告終果,試想一下若是不把這些數據存放起來,相比重啓電腦以後,「哭都沒地方哭了」編碼

可見,在把數據存儲起來有作麼大的價值3d

使用文件的目的:指針

就是把一些存儲存放起來,可讓程序下一次執行的時候直接使用,而沒必要從新制做一份,省時省力code

1.2 文件的存儲方式

在計算機中,文件是以二進制的方式保存在磁盤上的視頻

文本文件和二進制文件對象

文本文件

​ 可使用文件編輯軟件查看

​ 本質上仍是一個二進制文件

​ 例如:python的源程序

二進制文件

​ 保存的內容不是給人直接閱讀的,而是提供給其餘軟件使用的

​ 例如:圖片文件,音頻文件,視頻文件等等

​ 二進制文件不能使用文本編輯軟件查看

2、文件的基本操做

2.1 操做文件的步驟

在計算機中要操做文件的套路很是固定,包含如下三個步驟

  1. 打開文件(首先要先找到文件並打開.)

  2. 讀,寫文件

    ​ 讀:將文件內容讀入內存

    ​ 寫:將內存內容寫入文件

  3. 關閉文件

2.2 操做文件的函數

在python中要操做文件須要記住如下函數

序號 函數/方法 說明
01 open 打開文件,而且返回文件操做對象
02 read 將文件內容讀取到內存
03 write 將制定內容寫入文件
04 close 關閉文件

open 函數負責打開文件,而且返回文件對象

read/write/close 三個方法都須要經過文件對象來調用

2.3 打開文件的方式

打開文件使用 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+ 以覆寫方式打開文件。若是該文件已存在,文件指針將會訪問文件的結尾。若是文件不存在,建立新文件寫入

頻繁的移動文件指針,會影響文件的讀寫效率,開發中更多的時候會以只讀,只寫的方式來操做文件

2.4 文件的讀和寫

2.4.1文件讀取

open 函數的第一個參數是要打開的文件名(文件名區分大小寫)

​ 若是文件存在,返回文件操做對象

​ 若是文件不存在,會拋出異常

read 方法能夠一次性讀入並返回文件的全部內容

close 方法負責關閉文件

若是忘記關閉文件,會形成系統資源消耗,並且會影響到後續對文件的訪問

注意:方法執行後,會把文件指針移動到文件的末尾

# 1.打開
file = open("文件路徑")

# 2.讀取
text = file.read()
print(text)

# 3.關閉
file.close()

提示:在開發中,爲了防止忘記關閉文件,一般會編寫打開和關閉的代碼,再編寫中間針對文件的讀/寫操做

read 的幾種方式

  1. 使用read(num)能夠從文件中讀取數據,num表示要從文件中讀取的數據的長度(單位是字節),若是沒有傳入num,那麼就表示讀取文件中全部的數據

  2. 讀取一行

    read 方法默認會把文件的全部內容一次性讀取到內存

    若是文件太大,對內存的佔用會很是嚴重,可使用 readline 方法

    ​ readline 方法能夠一次讀取一行內容

    ​ 方法執行後,會把文件指針移動到下一行,準備再次讀取

    讀取大文件的正確姿式

    # 打開文件
    file = open("文件名")
    
    # 循環讀取文件
    while True:
    	# 讀取一行內容
    	text = file.readline()
    	
    	# 判斷是否讀到內容
    	if not text:
    		break
    	
    	# 每讀取一行的末尾已經有了一個"\n"
    	print(text, end = "")
    
    # 關閉文件
    file.close()
  3. 使用for ... in...讀取 效率更高

    # 使用for循環進行讀取更效率
    file = open('demo1.txt', 'r+t', encoding='utf-8')
    for line in file:
        print(line)
  4. 使用readlines()進行讀取,會把讀取的每行內容放在一個列表當中

    file = open('demo1.txt', 'r+t', encoding='utf-8')
    # 使用readlines()進行讀取,會把讀取的每行內容放在一個列表當中
    print(file.readlines())
2.4.2 文件寫出

write(string)

向文件中寫入字符串, 並返回寫入的字符的個數.

file = open("new.txt", "w+", encoding="utf-8")

count = file.write("你好啊abc")
print(count)

注意:

  1. 若是文件模式使用r+, 則文件不存在會拋出異常.
  2. w+, 文件不存在會自動建立文件, 並寫入
  3. 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)

2.4.3其餘方法

文件指針(瞭解)

​ 文件指針 標記從哪一個位置開始讀取數據

​ 第一次打開文件時,一般文件指針會指向文件的開始位置

​ 當執行了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))

2.5 文件的關閉

關閉文件

爲何要關閉文件:

  1. 打開文件以後老是會佔用必定的系統資源, 因此當你對文件操做完畢以後, 應該關閉文件.
  2. 寫入數據的時候, 並非當即寫入到文件中, 通常先放入到緩衝區. 當關閉文件的時候, 再從緩衝區寫入到文件中.

關閉文件調用文件對象的close()方法便可.

2.6 文件的複製

讀取源文件的數據,寫給目標文件

小文件:使用read(),write()

大文件:使用readline(),write()

2.7 文本文件的編碼格式

文本文件存儲的內容是基於字符編碼的文件,常見的編碼有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

2.8使用 with 方式打開文件

打開文件的時候使用with關鍵字, 能夠在文件操做完畢以後在合適時間自動關閉文件, 即便發生了異常也能關閉文件.

並且代碼要比處理異常的語句少

with open("new.txt", "r+", encoding="utf-8") as file:
    print(file.read())
相關文章
相關標籤/搜索