日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

Python 面向对象 --- 文件

發(fā)布時(shí)間:2024/4/13 python 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python 面向对象 --- 文件 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目標(biāo)

  • 文件的概念
  • 文件的基本操作
  • 文件/文件夾的常用操作
  • 文本文件的編碼方式

01,文件的概念

1.1 文件的概念和作用

  • 計(jì)算機(jī)的 文件,就是存儲(chǔ)在某種 長(zhǎng)期存儲(chǔ)設(shè)備 上的一段 數(shù)據(jù)
  • 長(zhǎng)期存儲(chǔ)設(shè)備包括:硬盤(pán)、U盤(pán)、移動(dòng)硬盤(pán)、光盤(pán)。。。

文件的作用

將數(shù)據(jù)長(zhǎng)期保存下來(lái),在需要的時(shí)候使用

1.2 文件的存儲(chǔ)方式

  • 在計(jì)算機(jī)中,文件是以 二進(jìn)制 的方式保存在磁盤(pán)上的

文本文件和二進(jìn)制文件

  • 文本文件
    • 可以使用 文本編輯軟件 查看
    • 本質(zhì)上還是二進(jìn)制wenjian
    • 例如:python的源程序
  • 二進(jìn)制文件
    • 保存的內(nèi)容 不是給人直接閱讀的,而是 提供給其它軟件使用的
    • 例如:圖片文件、音頻文件、視頻文件等等
    • 二進(jìn)制文件不能直接使用 文本編輯軟件 查看

02,文件的基本操作

2.1 操作文件的套路

計(jì)算機(jī) 中要操作文件的套路非常固定,一共包含三個(gè)步驟:
1,打開(kāi)文件

2,讀寫(xiě)文件

  • 將文件的內(nèi)容讀入內(nèi)存
  • 寫(xiě) 將內(nèi)存的內(nèi)容寫(xiě)進(jìn)文件

3,關(guān)閉文件

2.2 操作文件的函數(shù)/方法

  • 在 python 中要操作文件需要記住1個(gè)函數(shù)和3個(gè)方法
序號(hào)函數(shù)/方法說(shuō)明
01open打開(kāi)文件,并且返回文件操作對(duì)象
02read將文件內(nèi)容讀取到內(nèi)存
03write將指定內(nèi)容寫(xiě)入文件
04close關(guān)閉文件
  • open 函數(shù)負(fù)責(zé)打開(kāi)文件,并且返回文件對(duì)象
  • read/write/close 三個(gè)方法都需要通過(guò) 文件對(duì)象 來(lái)調(diào)用

2.3 read 方法 - - 讀取文件

  • open 函數(shù)的第一個(gè)參數(shù)是要打開(kāi)的文件名(文件名區(qū)分大小寫(xiě))
    • 如果文件 存在,返回 文件操作對(duì)象
    • 如果文件 不存在 ,會(huì) 拋出異常
  • read 方法可以一次性 讀入返回 文件的 所有內(nèi)容
  • close 方法負(fù)責(zé) 關(guān)閉文件
    • 如果 **忘記關(guān)閉文件,會(huì)造成系統(tǒng)資源消耗,而且會(huì)影響到后續(xù)對(duì)文件的訪問(wèn)
  • 注意:方法執(zhí)行后,會(huì)把 文件指針 移動(dòng)到 文件的末尾
# 1,打開(kāi)文件 file = open("README")# 2,讀取文件 text = file.read() print(text) # 3,關(guān)閉文件 file.close()# 結(jié)果呈現(xiàn) HELLO HELLO hello hello

提示

  • 在開(kāi)發(fā)中,通常會(huì)先編寫(xiě) 打開(kāi)關(guān)閉 的代碼,再編寫(xiě)中間針對(duì)文件的 讀寫(xiě) 操作

文件指針

  • 文件指針 標(biāo)記 從哪個(gè)位置開(kāi)始讀取數(shù)據(jù)
  • 第一次打開(kāi) 文件時(shí),通常 文件指針會(huì)指向文件的開(kāi)始位置
  • 當(dāng)執(zhí)行了 read 方法后,文件指針 會(huì)移動(dòng)到 讀取內(nèi)容的末尾
    • 默認(rèn)情況下會(huì)移動(dòng)到 文件末尾

思考

  • 如果執(zhí)行了一次 read 方法,讀取了所有內(nèi)容,那么再次調(diào)用 read 方法,還能獲取到內(nèi)容么?

答案

  • 不能
  • 第一次讀取之后,文件指針移動(dòng)到了文件末尾,再次調(diào)用不會(huì)再次獲取內(nèi)容
# 1,打開(kāi)文件 file = open("README")# 2,讀取文件 text = file.read() print(text) print(len(text)) print("-" * 20)text = file.read() print(text) print(len(text))# 3,關(guān)閉文件 file.close()# 結(jié)果呈現(xiàn) HELLO HELLO hello hello 23 --------------------0

2.4 打開(kāi)文件的方式

  • open 函數(shù)默認(rèn)以 只讀方式 打開(kāi)文件,并且放回文件對(duì)象
f = open("文件名", “訪問(wèn)方式”, "指定編碼方式") f = open("file_info", mode='r', encoding="utf-8" )# 推薦使用 with open("file_info", mode='r', encoding="utf-8" ) as f:print(f.read()) 訪問(wèn)方式說(shuō)明
r只讀 方式打開(kāi)文件。文件的指針將會(huì)放在文件的開(kāi)頭,這是 默認(rèn)模式。如果文件不存在,拋出異常
w只寫(xiě) 方式打開(kāi)文件。如果文件存在會(huì)被覆蓋。如果不存在,創(chuàng)建新文件
a追加 方式打開(kāi)文件。如果該文件已經(jīng)存在,文件指針將會(huì)放在文件的末尾。如果文件不存在,創(chuàng)建新文件進(jìn)行寫(xiě)入
r+讀寫(xiě) 方式打開(kāi)文件。文件的指針警徽放在文件的開(kāi)頭,如果文件不存在,拋出異常
w+讀寫(xiě) 方式打開(kāi)文件。如果文件存在會(huì)被覆蓋,如果文件不存在創(chuàng)建新文件
a+讀寫(xiě) 方式打開(kāi)文件。如果該文件存在,文件指針將會(huì)放在文件的末尾,如果該文件不存在,創(chuàng)建新文件進(jìn)行寫(xiě)入

提示

  • 頻繁的移動(dòng)文件指針,會(huì)影響文件的讀寫(xiě)效率,開(kāi)發(fā)中更多的時(shí)候是以 只讀、只寫(xiě) 的方式來(lái)操作文件

2.5 按行讀取文件內(nèi)容

  • read 方法默認(rèn)會(huì)把文件的 所有內(nèi)容 一次性讀取到內(nèi)存
  • 如果文件太大,對(duì)內(nèi)存的占用非常嚴(yán)重

readline 方法

  • readline 方法可以一次讀取一行內(nèi)容
  • 方法執(zhí)行后,會(huì)把 文件指針 移動(dòng)到下一行,準(zhǔn)備再次讀取

讀取大文件的正確姿勢(shì)

# 1,打開(kāi)文件 file = open("README")# 2,寫(xiě)取文件 while True:text = file.readline()# 判斷是否讀取到內(nèi)容if not text:breakprint(text) # 3,關(guān)閉文件 file.close()# 結(jié)果呈現(xiàn) Hello1Hello2Hello3Hello4Hello5Hello6

2.6 文件讀寫(xiě)案例 - - 復(fù)制文件

目標(biāo)
用代碼的方式,實(shí)現(xiàn)文件復(fù)制過(guò)程

小文件復(fù)制

  • 打開(kāi)一個(gè)已有文件,讀取完整內(nèi)容,并寫(xiě)入到另一個(gè)文件
# 打開(kāi)文件 file_read = open("README") file_write = open("README_BAK", "w")# 讀寫(xiě)過(guò)程 text = file_read.read() file_write.write(text)# 關(guān)閉文件 file_read.close() file_write.close()# 結(jié)果呈現(xiàn) Hello1 Hello2 Hello3

大文件復(fù)制

  • 打開(kāi)一個(gè)已有文件,逐行讀取內(nèi)容,并順序?qū)懭氲搅硪粋€(gè)文件
# 打開(kāi)文件 file_read = open("README") file_write = open("README_BAK", "w")# 讀寫(xiě)過(guò)程 while True:text = file_read.readline()# 判斷是否讀取到內(nèi)容if not text:breakfile_write.write(text)# 關(guān)閉文件 file_read.close() file_write.close()# 結(jié)果呈現(xiàn) Hello1 Hello2 Hello3 Hello4 Hello5 Hello6

2.7 文件指針操作方法

序號(hào)方法名說(shuō)明
01seek指定光標(biāo)移動(dòng)到某個(gè)位置
02tell獲取光標(biāo)當(dāng)前位置
03truncate截取文件

03,文件/目錄的常用管理操作

  • 終端/文件瀏覽器、中可以執(zhí)行常規(guī)的 文件/目錄 管理操作,例如:
    • 創(chuàng)建、重命名、刪除、改變路徑、查看目錄內(nèi)容、....
  • 在 python 中,如果希望通過(guò)程序?qū)崿F(xiàn)上述功能,需要導(dǎo)入 os 模塊

文件操作

序號(hào)方法名說(shuō)明示例
01rename重命名文件os.rename(源文件名, 目標(biāo)文件名)
02remove刪除文os.remove(文件名)

目錄操作

序號(hào)方法名說(shuō)明示例
01listdir目錄列表os.listdir(目錄名)
02mkdir創(chuàng)建目錄os.mkdir(目錄名)
03rmdir刪除目錄os.rmdir(刪除目錄)
04getcwd獲取當(dāng)前目錄os.getcwd()
05chdir修改工作目錄os.chdir(目錄名)
06path.isdir判斷是否是文件os.path.isdir(文件路徑)

提示
文件或者目錄從這都支持 相對(duì)路徑絕對(duì)路徑

實(shí)例1:注冊(cè)登錄

注冊(cè)一個(gè)賬號(hào)密碼,登錄機(jī)會(huì)3次

# 注冊(cè) username = input("請(qǐng)輸入您要注冊(cè)的賬號(hào):") password = input("請(qǐng)輸入您要注冊(cè)的密碼:") with open("register_login_list_info",mode='w',encoding="utf-8") as f:f.write("{}\n{}".format(username, password)) print("注冊(cè)成功!!!")# 登錄 login_list = [] count = 0 while count < 3:login_username = input("請(qǐng)輸入您要登錄的賬號(hào):")login_password = input("請(qǐng)輸入您要登錄的密碼:")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("賬號(hào)密碼錯(cuò)誤!!!")count += 1

實(shí)例2 修改文件內(nèi)容

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("小雨", "小水")# 寫(xiě)文件f1.write(line)# 刪除源文件 os.remove("work_name") # 重名文件名 os.rename("work_name_bak", "work_name")

源文件內(nèi)容 work_name

運(yùn)維:小風(fēng) 開(kāi)發(fā):小雨

修改后的文件內(nèi)容 work_name

運(yùn)維:小風(fēng) 開(kāi)發(fā):小水

04,文本文件的編碼格式

  • 文本文件存儲(chǔ)的內(nèi)容是基于 字符編碼 的文件,常見(jiàn)的編碼有 ASCII 編碼,UNICODE 編碼等
    • Python 2.x 默認(rèn)使用的是 ASCII編碼
    • Python 3.x 默認(rèn)使用的是 UTF-8 編碼

4.1 ASCII 編碼 和 UNICODE 編碼

ASCII 編碼

  • 計(jì)算機(jī)中只有 256 個(gè) ASCII 字符
  • 一個(gè) ASCII 在內(nèi)存中占用 1個(gè)字節(jié) 的空間
    • 8 個(gè) 0/1 的排列組合方式一共有 256 種,也就是 2 ** 8

UTF-8 編碼格式

  • 計(jì)算機(jī)中使用 1-6個(gè)字節(jié) 來(lái)表示一個(gè) UTF-8 字符,函蓋了 地球上幾乎所有地區(qū)的文字
  • 大多數(shù)漢字會(huì)使用 3個(gè)字節(jié) 表示
  • UTF-8 是 UNICODE 編碼的一種編碼格式

4.2 Python 2.x 中如何使用中文

  • Python 2.x 默認(rèn)使用的是 ASCII編碼
  • Python 3.x 默認(rèn)使用的是 UTF-8 編碼

  • 在Python 2.x 文件的 第一行 增加以下代碼,解釋器會(huì)以 utf-8 的編碼來(lái)處理 python 文件

# *-* coding:utf8 *-*

這方式是官方推薦是使用的

  • 也可以
# conding=utf8

unicode 字符串

  • 在 python 2.x 中,即使指定了文件使用 UTF-8 的編碼格式,但是在遍歷字符串時(shí),仍然會(huì) 以字節(jié)為單位遍歷 字符串
  • 更能夠 正確的遍歷字符串,在定義字符串時(shí),需要 在zi字符串的引導(dǎo)前,增加一個(gè)小字母 u 告訴解釋器這是一個(gè) unicode 字符串,(使用 UTF-8 編碼格式的字符串)
# *-* coding:utf8 *-*# 引號(hào)前面的u告訴解釋器這是一個(gè)utf-8編碼格式的字符串 hello_str = u"hello 世界"print(hello_str)for i in hello_str:print(i)# 結(jié)果呈現(xiàn) hello 世界 h e l l o世 界

轉(zhuǎn)載于:https://www.cnblogs.com/xiaoqshuo/p/9541815.html

總結(jié)

以上是生活随笔為你收集整理的Python 面向对象 --- 文件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。