Python 面向?qū)ο?10: 文件操作

一、總體目錄

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

二丰捷、文件的概念

  • 2.1、文件的概念和作用
    • 計(jì)算機(jī)的 文件,就是存儲(chǔ)在某種 長(zhǎng)期儲(chǔ)存設(shè)備 上的一段 數(shù)據(jù)
    • 長(zhǎng)期存儲(chǔ)設(shè)備包括:硬盤务漩、U 盤、移動(dòng)硬盤它褪、光盤...
    • 文件的作用:將數(shù)據(jù)長(zhǎng)期保存下來(lái)饵骨,在需要的時(shí)候使用
      CPU&內(nèi)存條&硬盤
  • 2.2、文件的存儲(chǔ)方式
    • 在計(jì)算機(jī)中茫打,文件是以 二進(jìn)制 的方式保存在磁盤上的
    • 文件分為:文本文件二進(jìn)制文件
      • 文本文件

        可以使用 文本編輯軟件 查看
        本質(zhì)上還是二進(jìn)制文件
        例如:python 的源程序
        
      • 二進(jìn)制文件(不能使用 文本編輯軟件 查看)

        保存的內(nèi)容 不是給人直接閱讀的居触,而是 提供給其他軟件使用的
        例如:圖片文件、音頻文件老赤、視頻文件等等
        二進(jìn)制文件不能使用 文本編輯軟件 查看
        

三轮洋、 文件的基本操作

  • 3.1、 操作文件的套路(套路非常固定抬旺,一共包含三個(gè)步驟)

    • 打開文件
    • 讀弊予、寫文件
      讀: 將文件內(nèi)容讀入內(nèi)存
      寫: 將內(nèi)存內(nèi)容寫入文件
    • 關(guān)閉文件
  • 3.2、操作文件的函數(shù)/方法(操作文件需要記住 1 個(gè)函數(shù)3 個(gè)方法)开财,下面的open是函數(shù)棕孙,調(diào)用后返回的文件對(duì)象去掉用剩下的三個(gè)方法

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

    • open 函數(shù)的第一個(gè)參數(shù)是要打開的文件名(文件名區(qū)分大小寫
      • 如果文件 存在沼本,返回 文件操作對(duì)象
      • 如果文件 不存在卖氨,會(huì) 拋出異常
    • read 方法可以一次性 讀入返回 文件的 所有內(nèi)容
    • close 方法負(fù)責(zé) 關(guān)閉文件(如果 忘記關(guān)閉文件坞淮,會(huì)造成系統(tǒng)資源消耗当纱,而且會(huì)影響到后續(xù)對(duì)文件的訪問)

    注意:read 方法執(zhí)行后,會(huì)把 文件指針 移動(dòng)到 文件的末尾

    # 1、打開 - 文件名需要注意大小寫
    file = open("TestText")
    
    # 2.讀取文件內(nèi)容
    text = file.read()
    print(text)
    
    # 3.關(guān)閉文件
    file.close()
    

    提示:在開發(fā)中乓诽,通常會(huì)先編寫 打開關(guān)閉 的代碼帜羊,再編寫中間針對(duì)文件的 讀/寫 操作!

  • 3.4鸠天、文件指針

    • 文件指針 標(biāo)記 從哪個(gè)位置開始讀取數(shù)據(jù)
    • 第一次打開(也就是open的時(shí)候) 文件時(shí)逮壁,通常 文件指針會(huì)指向文件的開始位置
    • 當(dāng)執(zhí)行了 read 方法后,文件指針 會(huì)移動(dòng)到 讀取內(nèi)容的末尾(默認(rèn)情況下會(huì)移動(dòng)到 文件末尾)粮宛,比如:如果執(zhí)行了一次 read 方法窥淆,讀取了所有內(nèi)容,那么再次調(diào)用 read 方法巍杈,文件指針已經(jīng)在文件的末尾了忧饭,再讀取的內(nèi)容是空的
  • 3.5、打開文件的方式

    • open 函數(shù)默認(rèn)以 只讀方式(r) 打開文件筷畦,并且返回文件對(duì)象

    • 語(yǔ)法如下:(文件名需要注意大小寫)

      file = open("文件名", "訪問方式")  # 文件名需要注意大小寫
      
    訪問方式 說(shuō)明
    r 只讀方式打開文件词裤。文件的指針將會(huì)放在文件的開頭,這是默認(rèn)模式鳖宾。如果文件不存在吼砂,拋出異常
    w 只寫方式打開文件。如果文件存在會(huì)被覆蓋鼎文。如果文件不存在渔肩,創(chuàng)建新文件
    a 追加方式打開文件。如果該文件已存在拇惋,文件指針將會(huì)放在文件的結(jié)尾周偎。如果文件不存在,創(chuàng)建新文件進(jìn)行寫入
    r+ 讀寫方式打開文件撑帖。文件的指針將會(huì)放在文件的開頭蓉坎。如果文件不存在,拋出異常
    w+ 讀寫方式打開文件胡嘿。如果文件存在會(huì)被覆蓋蛉艾。如果文件不存在,創(chuàng)建新文件
    a+ 讀寫方式打開文件衷敌。如果該文件已存在勿侯,文件指針將會(huì)放在文件的結(jié)尾。如果文件不存在逢享,創(chuàng)建新文件進(jìn)行寫入
    • 提示:頻繁的移動(dòng)文件指針罐监,會(huì)影響文件的讀寫效率,開發(fā)中更多的時(shí)候會(huì)以 只讀瞒爬、只寫 的方式來(lái)操作文件
    • 寫入文件示例

      # 打開文件
      file = open("TestText", "w")
      
      file.write("hello python !")
      
      # 關(guān)閉文件
      file.close()
      
  • 3.6、按行讀取文件內(nèi)容

    • read 方法默認(rèn)會(huì)把文件的 所有內(nèi)容 一次性讀取到內(nèi)存
    • 如果文件太大,對(duì)內(nèi)存的占用會(huì)非常嚴(yán)重
    • readline 方法(讀取文件的一行數(shù)據(jù))侧但,在讀取大文件的時(shí)候很方便矢空,逐行讀取
      • readline 方法可以一次讀取一行內(nèi)容

      • 方法執(zhí)行后,會(huì)把 文件指針 移動(dòng)到下一行禀横,準(zhǔn)備再次讀取

        # 打開文件
        file = open("TestText")
        
        while True:
            # 讀取一行內(nèi)容
            text = file.readline()
        
            # 判斷是否讀到內(nèi)容
            if not text:
                  break
        
            # 每讀取一行的末尾已經(jīng)有了一個(gè) `\n`
            print(text, end="")
        
        # 關(guān)閉文件
        file.close()
        
  • 3.7屁药、文件讀寫案例 —— 復(fù)制文件


    復(fù)制文件
    • 3.7.1、小文件復(fù)制

      # 1柏锄、打開文件
      file_read = open("TestText","r")
      file_write = open("TestTextWrite","w")
      
      # 2.讀取文件內(nèi)容
      text = file_read.read()
      file_write.write(text)
      
      # 3.關(guān)閉文件
      file_read.close()
      file_write.close()
      
    • 3.7.2酿箭、大文件復(fù)制(打開一個(gè)已有文件,逐行讀取內(nèi)容趾娃,并順序?qū)懭氲搅硗庖粋€(gè)文件)

      # 1缭嫡、打開文件
      file_read = open("TestText","r")
      file_write = open("TestTextWrite","w")
      
      while True:
      
           # 2.讀取文件內(nèi)容
           text = file_read.read()
      
          # 沒有內(nèi)容就跳出循環(huán)
          if not text:
                break
      
          file_write.write(text)
      
      # 3.關(guān)閉文件
      file_read.close()
      file_write.close()
      

四、文件/目錄的常用管理操作

  • 4.1抬闷、 在 終端 / 文件瀏覽器妇蛀、 中可以執(zhí)行常規(guī)的 文件 / 目錄 管理操作,例如:

    • 創(chuàng)建笤成、重命名评架、刪除、改變路徑炕泳、查看目錄內(nèi)容纵诞、……
      在 Python 中,如果希望通過程序?qū)崿F(xiàn)上述功能培遵,需要導(dǎo)入 os 模塊
  • 4.2挣磨、文件操作 列表

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

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

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

五荤懂、文本文件的編碼格式

  • 5.1茁裙、文本文件存儲(chǔ)的內(nèi)容是基于 字符編碼 的文件,常見的編碼有 ASCII 編碼节仿,UNICODE 編碼等

    • Python 2.x 默認(rèn)使用 ASCII 編碼格式
    • Python 3.x 默認(rèn)使用 UTF-8 編碼格式
  • 5.2晤锥、ASCII 編碼和 UNICODE 編碼

    • ASCII 編碼

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

      • 計(jì)算機(jī)中使用 1~6個(gè)字節(jié) 來(lái)表示一個(gè) UTF-8 字符廊宪,涵蓋了 地球上幾乎所有地區(qū)的文字
      • 大多數(shù)漢字會(huì)使用 3 個(gè)字節(jié) 表示
      • UTF-8UNICODE 編碼的一種編碼格式
  • 5.3矾瘾、Ptyhon 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 *-*
    

    也可以使用

    # coding=utf8
    
  • 5.4壕翩、unicode 字符串

    • Python 2.x 中,即使指定了文件使用 UTF-8 的編碼格式傅寡,但是在遍歷字符串時(shí)放妈,仍然會(huì) 以字節(jié)為單位遍歷 字符串

    • 要能夠 正確的遍歷字符串北救,在定義字符串時(shí),需要 在字符串的引號(hào)前芜抒,增加一個(gè)小寫字母 u珍策,告訴解釋器這是一個(gè) unicode字符串(使用 UTF-8 編碼格式的字符串)

    • 如下的例子:

      # *-* coding:utf8 *-*
      
      # 在字符串前,增加一個(gè) `u` 表示這個(gè)字符串是一個(gè) utf8 字符串
      hello_str = u"你好天朝"
      
      print(hello_str)
      
      for c in hello_str:
             print(c)
      
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末宅倒,一起剝皮案震驚了整個(gè)濱河市攘宙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拐迁,老刑警劉巖蹭劈,帶你破解...
    沈念sama閱讀 222,378評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異线召,居然都是意外死亡铺韧,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門灶搜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)祟蚀,“玉大人,你說(shuō)我怎么就攤上這事割卖∏澳穑” “怎么了?”我有些...
    開封第一講書人閱讀 168,983評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵鹏溯,是天一觀的道長(zhǎng)罢维。 經(jīng)常有香客問我,道長(zhǎng)丙挽,這世上最難降的妖魔是什么肺孵? 我笑而不...
    開封第一講書人閱讀 59,938評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮颜阐,結(jié)果婚禮上平窘,老公的妹妹穿的比我還像新娘。我一直安慰自己凳怨,他們只是感情好瑰艘,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,955評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著肤舞,像睡著了一般紫新。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上李剖,一...
    開封第一講書人閱讀 52,549評(píng)論 1 312
  • 那天芒率,我揣著相機(jī)與錄音,去河邊找鬼篙顺。 笑死偶芍,一個(gè)胖子當(dāng)著我的面吹牛充择,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播腋寨,決...
    沈念sama閱讀 41,063評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼聪铺,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼化焕!你這毒婦竟也來(lái)了萄窜?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,991評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤撒桨,失蹤者是張志新(化名)和其女友劉穎查刻,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體凤类,經(jīng)...
    沈念sama閱讀 46,522評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡穗泵,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,604評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了谜疤。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片佃延。...
    茶點(diǎn)故事閱讀 40,742評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖夷磕,靈堂內(nèi)的尸體忽然破棺而出履肃,到底是詐尸還是另有隱情,我是刑警寧澤坐桩,帶...
    沈念sama閱讀 36,413評(píng)論 5 351
  • 正文 年R本政府宣布尺棋,位于F島的核電站,受9級(jí)特大地震影響绵跷,放射性物質(zhì)發(fā)生泄漏膘螟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,094評(píng)論 3 335
  • 文/蒙蒙 一碾局、第九天 我趴在偏房一處隱蔽的房頂上張望荆残。 院中可真熱鬧,春花似錦净当、人聲如沸内斯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)嘿期。三九已至,卻和暖如春埋合,著一層夾襖步出監(jiān)牢的瞬間备徐,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工甚颂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蜜猾,地道東北人秀菱。 一個(gè)月前我還...
    沈念sama閱讀 49,159評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蹭睡,于是被迫代替她去往敵國(guó)和親衍菱。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,747評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容