黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

python 文件處理

系統(tǒng) 1916 0

文件概述

? 若想將應(yīng)用程序獲取到的數(shù)據(jù)永久保存下來,就必須保存于硬盤中,操作系統(tǒng)把復(fù)雜的硬件操作封裝成簡單的接口給用戶/應(yīng)用程序使用,其中文件就是操作系統(tǒng)提供給應(yīng)用程序來操作硬盤虛擬概念,用戶或應(yīng)用程序通過操作文件,可以將自己的數(shù)據(jù)永久保存下來。

  • 文劍操作流程

  1. 打開一個(gè)文件,得到一個(gè)文件句柄并復(fù)制給變量
            
              fp = open('a.txt',mode='r',encoding='utf-8')
            
          
  1. 通過文件句柄對文件進(jìn)行操作
            
              data = fp.read()
            
          
  1. 關(guān)閉文件
            
              fp.colse()
            
          
  • 關(guān)閉文件注意事項(xiàng)

? 打開一個(gè)文件包含兩部分資源,操作系統(tǒng)級(jí)打開的文件+應(yīng)用程序的變量,在程序操作完畢一個(gè)文件后,必須把文件的這兩部分資源一個(gè)不落的回收掉,回收方法是:

            
              fp.close()
            
          

? 但是我們經(jīng)常操作完文件后,會(huì)忘記關(guān)閉文件,就會(huì)導(dǎo)致資源在使用,從而浪費(fèi)導(dǎo)致程序運(yùn)行慢等各種原因。

? 這里就可以使用上下文管理方式,去操作。

? 優(yōu)勢:只要寫一次打開文件,當(dāng)所屬句柄下的代碼執(zhí)行完畢,程序結(jié)束時(shí),會(huì)自動(dòng)關(guān)閉文件,釋放資源

            
              with open('a.txt',mode='r',encoding='utf-8') as fp:
 pass
            
          
  • 文件編碼

? 上面我們看open打開文件的時(shí)候,括號(hào)里需要指定一些參數(shù),先來講這里的 encoding='utf-8' ,如果打開文件時(shí),沒有指定這個(gè)參數(shù),默認(rèn)會(huì)按系統(tǒng)默認(rèn)的編碼打開這個(gè)文件,大多數(shù)情況下我們默認(rèn)的系統(tǒng)編碼都是gbk,如果這個(gè)文件當(dāng)初是以utf-8編碼的,這樣默認(rèn)打開如果有中文很可能會(huì)得到不是你需要的結(jié)果,我們也稱之為 亂碼 .

            
              #若不想遇到亂碼問題,文件是什么格式保存的,我們就需要用什么編碼打開,推薦以后默認(rèn)使用utf-8保存及編寫
f=open('a.txt','r',encoding='utf-8')
            
          
  • 文件的打開模式

          
            文件句柄 = open('文件路徑',模式)
          
        
模式 含義
’r‘ open for reading(default)
'w' open for writing,truncating the file first
'a' open for writing,appending to the end of the file is exists
'b' binary mode
‘t' 文字模式(默認(rèn))
‘+' 打開磁盤文件進(jìn)行更新(讀寫)
‘U' universal newline mode (for backwards compatibility; should not be used in new code)
  1. 打開文件的模式有(默認(rèn)為文本模式):
            
              r ,只讀模式【默認(rèn)模式,文件必須存在,不存在則拋出異常】
w,只寫模式【不可讀;不存在則創(chuàng)建;存在則清空內(nèi)容】
a, 之追加寫模式【不可讀;不存在則創(chuàng)建;存在則只追加內(nèi)容】
            
          
  1. 對于非文本文件,我們只能使用b模式,"b"表示以字節(jié)的方式操作(而所有文件也都是以字節(jié)的形式存儲(chǔ)的,使用這種模式無需考慮文本文件的字符編碼、圖片文件的 jgp 格式、視頻文件的 avi 格式)
            
              rb 
wb
ab
注:以b方式打開時(shí),讀取到的內(nèi)容是字節(jié)類型,寫入時(shí)也需要提供字節(jié)類型,不能指定編碼
"+" 表示可以同時(shí)讀寫某個(gè)文件
r+, 讀寫【可讀,可寫】
w+,寫讀【可讀,可寫】
a+, 寫讀【可讀,可寫】
x, 只寫模式【不可讀;不存在則創(chuàng)建,存在則報(bào)錯(cuò)】
x+ ,寫讀【可讀,可寫】
xb
            
          
  1. 由于歷史的原因,換行符在不同的系統(tǒng)中有不同模式,比如在 unix 中是一個(gè)\n,而在windows中是‘\r\n’,用U模式打開文件,就是支持所有的換行模式,也就說‘\r’ '\n' '\r\n'都可表示換行

t是windows平臺(tái)特有的所謂text mode(文本模式),區(qū)別在于會(huì)自動(dòng)識(shí)別windows平臺(tái)的換行符。

            
              Files opened in binary mode (appending 'b' to the mode argument) return contents as bytes objects without any decoding.
b是以二進(jìn)制的形式來讀文件,但是顯示出來的卻不是0101,而是以字節(jié)的形式顯示出來。
一個(gè)字節(jié)是8位二進(jìn)制,所以計(jì)算機(jī)是自動(dòng)幫你進(jìn)行了轉(zhuǎn)換。
請不要誤會(huì)b模式是按照字節(jié)讀。
            
          
  • 文件的光標(biāo)移動(dòng)

read(3)
  1. 文件打開方式為文本時(shí),代表讀取3個(gè)字符
  2. 文件打開方式為bytes模式時(shí),代表三個(gè)字節(jié),(既是一個(gè)中文字符)
其余的文件內(nèi)光標(biāo)移動(dòng)都是以字節(jié)為單位如seek,tell,truncate

注意:

  1. seek有三種移動(dòng)方式0,1,2,其中1和2必須在b模式下進(jìn)行,但無論哪種模式,都是以bytes為單位移動(dòng)的
  2. truncate是截?cái)辔募晕募拇蜷_方式必須可寫,但是不能用w或w+等方式打開,因?yàn)槟菢又苯忧蹇瘴募耍詔runcate要在r+或a或a+等模式下測試效果
  • 文件的修改

文件的數(shù)據(jù)是存放于硬盤上的,因而只存在覆蓋、不存在修改這么一說,我們平時(shí)看到的修改文件,都是模擬出來的效果,具體的說有兩種實(shí)現(xiàn)方式:

? 方式一:將硬盤存放的該文件的內(nèi)容全部加載到內(nèi)存,在內(nèi)存中是可以修改的,修改完畢后,再由內(nèi)存覆蓋到硬盤(word,vim, nodpad++ 等編輯器)

            
              import os

with open('a.txt') as read_f,open('.a.txt.swap','w') as write_f:
 data=read_f.read() #全部讀入內(nèi)存,如果文件很大,會(huì)很卡
 data=data.replace('alex','SB') #在內(nèi)存中完成修改

 write_f.write(data) #一次性寫入新文件

os.remove('a.txt')
os.rename('.a.txt.swap','a.txt') 
            
          

? 方式二:講硬盤存放的該文件的內(nèi)容一行一行地讀入內(nèi)存,修改完畢就寫入新文件,最后用新文件覆蓋源文件

            
              import os

with open('a.txt') as read_f,open('.a.txt.swap','w') as write_f:
 for line in read_f:
     line=line.replace('alex','SB')
     write_f.write(line)

os.remove('a.txt')
os.rename('.a.txt.swap','a.txt') 
            
          
  • 練習(xí)

  1. 文件a.txt內(nèi)容:每一行內(nèi)容分別為商品名字,價(jià)錢,個(gè)數(shù),求出本次購物花費(fèi)的總錢數(shù)
          
            apple 10 3

tesla 100000 1

mac 3000 2

lenovo 30000 3

chicken 10 3
          
        
  1. 修改文件內(nèi)容,把文件中的 alex 都替換成SB

更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會(huì)非常 感謝您的哦!!!

發(fā)表我的評論
最新評論 總共0條評論