Python 面向对象 --- 文件
生活随笔
收集整理的這篇文章主要介紹了
Python 面向对象 --- 文件
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
目標
- 文件的概念
- 文件的基本操作
- 文件/文件夾的常用操作
- 文本文件的編碼方式
01,文件的概念
1.1 文件的概念和作用
- 計算機的 文件,就是存儲在某種 長期存儲設備 上的一段 數據
- 長期存儲設備包括:硬盤、U盤、移動硬盤、光盤。。。
文件的作用
將數據長期保存下來,在需要的時候使用
1.2 文件的存儲方式
- 在計算機中,文件是以 二進制 的方式保存在磁盤上的
文本文件和二進制文件
- 文本文件
- 可以使用 文本編輯軟件 查看
- 本質上還是二進制wenjian
- 例如:python的源程序
- 二進制文件
- 保存的內容 不是給人直接閱讀的,而是 提供給其它軟件使用的
- 例如:圖片文件、音頻文件、視頻文件等等
- 二進制文件不能直接使用 文本編輯軟件 查看
02,文件的基本操作
2.1 操作文件的套路
在 計算機 中要操作文件的套路非常固定,一共包含三個步驟:
1,打開文件
2,讀寫文件
- 讀 將文件的內容讀入內存
- 寫 將內存的內容寫進文件
3,關閉文件
2.2 操作文件的函數/方法
- 在 python 中要操作文件需要記住1個函數和3個方法
| 01 | open | 打開文件,并且返回文件操作對象 |
| 02 | read | 將文件內容讀取到內存 |
| 03 | write | 將指定內容寫入文件 |
| 04 | close | 關閉文件 |
- open 函數負責打開文件,并且返回文件對象
- read/write/close 三個方法都需要通過 文件對象 來調用
2.3 read 方法 - - 讀取文件
- open 函數的第一個參數是要打開的文件名(文件名區分大小寫)
- 如果文件 存在,返回 文件操作對象
- 如果文件 不存在 ,會 拋出異常
- read 方法可以一次性 讀入 并 返回 文件的 所有內容
- close 方法負責 關閉文件
- 如果 **忘記關閉文件,會造成系統資源消耗,而且會影響到后續對文件的訪問
- 注意:方法執行后,會把 文件指針 移動到 文件的末尾
提示
- 在開發中,通常會先編寫 打開 和 關閉 的代碼,再編寫中間針對文件的 讀寫 操作
文件指針
- 文件指針 標記 從哪個位置開始讀取數據
- 第一次打開 文件時,通常 文件指針會指向文件的開始位置
- 當執行了 read 方法后,文件指針 會移動到 讀取內容的末尾
- 默認情況下會移動到 文件末尾
思考
- 如果執行了一次 read 方法,讀取了所有內容,那么再次調用 read 方法,還能獲取到內容么?
答案
- 不能
- 第一次讀取之后,文件指針移動到了文件末尾,再次調用不會再次獲取內容
2.4 打開文件的方式
- open 函數默認以 只讀方式 打開文件,并且放回文件對象
| r | 以 只讀 方式打開文件。文件的指針將會放在文件的開頭,這是 默認模式。如果文件不存在,拋出異常 |
| w | 以 只寫 方式打開文件。如果文件存在會被覆蓋。如果不存在,創建新文件 |
| a | 以 追加 方式打開文件。如果該文件已經存在,文件指針將會放在文件的末尾。如果文件不存在,創建新文件進行寫入 |
| r+ | 以 讀寫 方式打開文件。文件的指針警徽放在文件的開頭,如果文件不存在,拋出異常 |
| w+ | 以 讀寫 方式打開文件。如果文件存在會被覆蓋,如果文件不存在創建新文件 |
| a+ | 以 讀寫 方式打開文件。如果該文件存在,文件指針將會放在文件的末尾,如果該文件不存在,創建新文件進行寫入 |
提示
- 頻繁的移動文件指針,會影響文件的讀寫效率,開發中更多的時候是以 只讀、只寫 的方式來操作文件
2.5 按行讀取文件內容
- read 方法默認會把文件的 所有內容 一次性讀取到內存
- 如果文件太大,對內存的占用非常嚴重
readline 方法
- readline 方法可以一次讀取一行內容
- 方法執行后,會把 文件指針 移動到下一行,準備再次讀取
讀取大文件的正確姿勢
# 1,打開文件 file = open("README")# 2,寫取文件 while True:text = file.readline()# 判斷是否讀取到內容if not text:breakprint(text) # 3,關閉文件 file.close()# 結果呈現 Hello1Hello2Hello3Hello4Hello5Hello62.6 文件讀寫案例 - - 復制文件
目標
用代碼的方式,實現文件復制過程
小文件復制
- 打開一個已有文件,讀取完整內容,并寫入到另一個文件
大文件復制
- 打開一個已有文件,逐行讀取內容,并順序寫入到另一個文件
2.7 文件指針操作方法
| 01 | seek | 指定光標移動到某個位置 | |
| 02 | tell | 獲取光標當前位置 | |
| 03 | truncate | 截取文件 |
03,文件/目錄的常用管理操作
- 在 終端/文件瀏覽器、中可以執行常規的 文件/目錄 管理操作,例如:
- 創建、重命名、刪除、改變路徑、查看目錄內容、....
- 在 python 中,如果希望通過程序實現上述功能,需要導入 os 模塊
文件操作
| 01 | rename | 重命名文件 | os.rename(源文件名, 目標文件名) |
| 02 | remove | 刪除文 | os.remove(文件名) |
目錄操作
| 01 | listdir | 目錄列表 | os.listdir(目錄名) |
| 02 | mkdir | 創建目錄 | os.mkdir(目錄名) |
| 03 | rmdir | 刪除目錄 | os.rmdir(刪除目錄) |
| 04 | getcwd | 獲取當前目錄 | os.getcwd() |
| 05 | chdir | 修改工作目錄 | os.chdir(目錄名) |
| 06 | path.isdir | 判斷是否是文件 | os.path.isdir(文件路徑) |
提示
文件或者目錄從這都支持 相對路徑 和 絕對路徑
實例1:注冊登錄
注冊一個賬號密碼,登錄機會3次
# 注冊 username = input("請輸入您要注冊的賬號:") password = input("請輸入您要注冊的密碼:") with open("register_login_list_info",mode='w',encoding="utf-8") as f:f.write("{}\n{}".format(username, password)) print("注冊成功!!!")# 登錄 login_list = [] count = 0 while count < 3:login_username = input("請輸入您要登錄的賬號:")login_password = input("請輸入您要登錄的密碼:")with open("register_login_list_info", mode='r+', encoding="utf-8") as f1:for i in f1:login_list.append(i)if login_username == login_list[0].strip() and login_password == login_list[1].strip():print("登錄成功!!!")breakelse:print("賬號密碼錯誤!!!")count += 1實例2 修改文件內容
modify_file_content.py
import oswith open("work_name",mode="r", encoding="utf-8") as f, open("work_name_bak", mode="w", encoding="utf-8") as f1:for line in f:if '小雨' in line:line = line.replace("小雨", "小水")# 寫文件f1.write(line)# 刪除源文件 os.remove("work_name") # 重名文件名 os.rename("work_name_bak", "work_name")源文件內容 work_name
運維:小風 開發:小雨修改后的文件內容 work_name
運維:小風 開發:小水04,文本文件的編碼格式
- 文本文件存儲的內容是基于 字符編碼 的文件,常見的編碼有 ASCII 編碼,UNICODE 編碼等
- Python 2.x 默認使用的是 ASCII編碼
- Python 3.x 默認使用的是 UTF-8 編碼
4.1 ASCII 編碼 和 UNICODE 編碼
ASCII 編碼
- 計算機中只有 256 個 ASCII 字符
- 一個 ASCII 在內存中占用 1個字節 的空間
- 8 個 0/1 的排列組合方式一共有 256 種,也就是 2 ** 8
UTF-8 編碼格式
- 計算機中使用 1-6個字節 來表示一個 UTF-8 字符,函蓋了 地球上幾乎所有地區的文字
- 大多數漢字會使用 3個字節 表示
- UTF-8 是 UNICODE 編碼的一種編碼格式
4.2 Python 2.x 中如何使用中文
- Python 2.x 默認使用的是 ASCII編碼
Python 3.x 默認使用的是 UTF-8 編碼
在Python 2.x 文件的 第一行 增加以下代碼,解釋器會以 utf-8 的編碼來處理 python 文件
注 這方式是官方推薦是使用的
- 也可以
unicode 字符串
- 在 python 2.x 中,即使指定了文件使用 UTF-8 的編碼格式,但是在遍歷字符串時,仍然會 以字節為單位遍歷 字符串
- 更能夠 正確的遍歷字符串,在定義字符串時,需要 在zi字符串的引導前,增加一個小字母 u 告訴解釋器這是一個 unicode 字符串,(使用 UTF-8 編碼格式的字符串)
轉載于:https://www.cnblogs.com/xiaoqshuo/p/9541815.html
總結
以上是生活随笔為你收集整理的Python 面向对象 --- 文件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: react跳转url,跳转外链,新页面打
- 下一篇: foreman源NO_PUBKEY 6F