亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

用Python操作文件

系統 1655 0

用Python操作文件

用word操作一個文件的流程如下:

1、找到文件,雙擊打開。

2、讀或修改。

3、保存&關閉。

用Python操作文件也差不多:

          
            f=open(filename)  # 打開文件
f.write("我是野生程序員") # 寫操作
f.read()  #讀操作
f.close() #保存并關閉
          
        

不過有一點跟人肉操作word文檔不同,就是word文檔只要打開了,就即可以讀、又可以修改。 但Python比較變態,只能以讀、創建、追加 3種模式中的任意一種打開文件,不能即寫又讀。

一、操作模式

  • r 只讀模式
  • w 創建模式,若文件已存在,則覆蓋舊文件
  • a 追加模式,新數據會寫到文件末尾

二、創建文件

          
            f = open(file='C:/工作日常/staff.txt',mode='w')
f.write("Kwan  CEO  100W\n")
f.write("KK  人事  5000\n")
f.close()
          
        

三、只讀模式

          
            f = open(file='兼職白領學生空姐模特護士聯系方式.txt',mode='r')
print(f.readline())  # 讀一行
print('------分隔符-------')
data = f.read()  # 讀所有,剩下的所有
print(data)
f.close()
          
        

執行結果:

          
            馬纖羽     深圳    173    50    13744234523
------分隔符-------
喬亦菲     廣州    172    52    15823423525
羅夢竹     北京    175    49    18623423421
劉諾涵     北京    170    48    18623423765
岳妮妮     深圳    177    54    18835324553
賀婉萱     深圳    174    52    18933434452
葉梓萱     上海    171    49    18042432324
          
        

你得有這么個文件才能用上面的代碼。。。

四、追加模式

          
            f = open(file='兼職白領學生空姐模特護士聯系方式.txt',mode='a')
f.write("黑姑娘 北京  168  48\n")  # 會追加到文件尾部
f.close()
          
        

五、循環文件

          
            f = open(file='兼職白領學生空姐模特護士聯系方式.txt',mode='r')
for line in f:
    line = line.split()
    name,addr,height,weight,phone = line
    height = int(height)
    weight = int(weight)
    if height > 170 and weight <= 50:
        print(line)
f.close()
          
        

輸出:

          
            ['馬纖羽', '深圳', '173', '50', '13744234523']
['羅夢竹', '北京', '175', '49', '18623423421']
['葉梓萱', '上海', '171', '49', '18042432324']
          
        

六、其它功能

          
            def mode(self) -> str:
        # 返回文件打開的模式
    def name(self) -> str:
        # 返回文件名
    def fileno(self, *args, **kwargs): # real signature unknown
        # 返回文件句柄在內核中的索引值,以后做IO多路復用時可以用到
    def flush(self, *args, **kwargs): # real signature unknown
        # 把文件從內存buffer里強制刷新到硬盤
    def readable(self, *args, **kwargs): # real signature unknown
        # 判斷是否可讀
    def readline(self, *args, **kwargs): # real signature unknown
        # 只讀一行,遇到\r or \n為止
    def seek(self, *args, **kwargs): # real signature unknown
        '''
        把操作文件的光標移到指定位置
        *注意seek的長度是按字節算的, 字符編碼存每個字符所占的字節長度不一樣。
        如“路飛學城” 用gbk存是2個字節一個字,用utf-8就是3個字節,因此以gbk打開時,seek(4) 就把光標切換到了“飛”和“學”兩個字中間。
        但如果是utf8,seek(4)會導致,拿到了飛這個字的一部分字節,打印的話會報錯,因為處理剩下的文本時發現用utf8處理不了了,因為編碼對不上了。少了一個字節
        '''
    def seekable(self, *args, **kwargs): # real signature unknown
        # 判斷文件是否可進行seek操作
    def tell(self, *args, **kwargs): # real signature unknown
        # 返回當前文件操作光標位置 
    def truncate(self, *args, **kwargs): # real signature unknown
        # 按指定長度截斷文件
        # *指定長度的話,就從文件開頭開始截斷指定長度,不指定長度的話,就從當前位置到文件尾部的內容全去掉。
    def writable(self, *args, **kwargs): # real signature unknown
        # 判斷文件是否可寫
          
        

七、混合模式

  • w+ 寫讀 , 這個功能基本沒什么意義,它會創建一個新文件 ,寫一段內容,可以再把寫的內容讀出來,沒什么卵用。
  • r+ 讀寫,能讀能寫,但都是寫在文件最后,跟追加一樣。
  • a+ 追加讀,文件一打開時光標會在文件尾部,寫的數據全會是追加的形式。

r+ 模式示例:

用Python操作文件_第1張圖片

因為默認就是往文件尾部寫入。

八、修改文件

嘗試直接以r+模式打開文件,默認會把新增的內容追加到文件最后面。但我想要的是修改中間的內容 ,怎么辦? 為什么會把內容添加到尾部呢?(最新測試r+會從頭覆蓋,測試代碼如下)

用Python操作文件_第2張圖片

問:為什么原有數據會被覆蓋呢?

這是硬盤的存儲原理導致的,當你把文件存到硬盤上,就在硬盤上劃了一塊空間,存數據,等你下次打開這個文件 ,seek到一個位置,每改一個字,就是把原來的覆蓋掉,如果要插入,是不可能的,因為后面的數據在硬盤上不會整體向后移。所以就出現 當前這個情況 ,你想插入,卻變成了會把舊內容覆蓋掉。

問:但是人家word, vim 都可以修改文件 呀,你這不能修改算個什么玩意?

并沒說就不能修改了,你想修改當然可以,就是不要在硬盤上修改,把內容全部讀到內存里,數據在內存里可以隨便增刪改查,修改之后,把內容再全部寫回硬盤,把原來的數據全部覆蓋掉。vim word等各種文本編輯器都是這么干的。

問:說的好像有道理,但你又沒看過word軟件的源碼,你憑什么這么篤定?

不需要看源碼,硬盤的存儲原理決定了word必須這么干 ,不信的話,還有個簡單的辦法來確認我說的,就是用word or vim讀一個編輯一個大文件 ,至少幾百MB的,你 會發現,加載過程會花個數十秒,這段時間干嘛了? cpu 去玩了?去上廁所啦? 當然不是,是在努力把數據 從硬盤上讀到內存里。

問:還有更好的方式么?

沒有。

占硬盤方式的文件修改代碼示例

          
            f_name = "兼職白領學生空姐模特護士聯系方式.txt"
f_new_name = "%s.new" % f_name
old_str = "劉諾涵"
new_str = "[黑姑娘]"
f = open(f_name,'r')
f_new = open(f_new_name,'w')
for line in f:
    if old_str in line:
        new_line = line.replace(old_str,new_str)
    else:
        new_line = line
    f_new.write(new_line)
f.close()
f_new.close()
          
        

上面的代碼,會生成一個修改后的新文件 ,原文件不動,若想覆蓋原文件:

          
            import os
f_name = "兼職白領學生空姐模特護士聯系方式.txt"
f_new_name = "%s.new" % f_name
old_str = "劉諾涵"
new_str = "[黑姑娘]"
f = open(f_name,'r')
f_new = open(f_new_name,'w')
for line in f:
    if old_str in line:
        new_line = line.replace(old_str,new_str)
    else:
        new_line = line
    f_new.write(new_line)
f.close()
f_new.close()
os.rename(f_new_name,f_name) #把新文件名字改成原文件 的名字,就把之前的覆蓋掉了,windows使用os.replace # 幫助文檔說明replace會覆蓋原文件
          
        

更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 亚洲成人免费视频在线 | 欧美成人h| 亚洲专区在线视频 | 在线观看精品91老司机 | a毛片在线还看免费网站 | 一区二区三区四区日韩 | 日韩欧美在线播放 | 国产一级毛片国语版 | 成人在线免费视频 | 中文字幕精品在线观看 | 偷偷鲁国内视频视频在线 | 女人十八毛片免费观 | 精品免费视在线观看 | 亚洲欧美日韩高清专区一区 | 国产粉嫩白浆在线观看 | 99久9在线视频 | 狠狠色丁香久久婷婷综合丁香 | 亚洲视频在线视频 | 亚洲视屏在线观看 | 久久综合爱 | 99国产精品国产精品 | 特级毛片s级全部免费 | 色播在线| 91九色视频无限观看免费 | 亚洲欧美成人永久第一网站 | 精品精品国产自在久久高清 | 天天干天天操天天舔 | 亚洲乱码中文字幕久久 | 99国产在线观看 | 尤物福利在线 | 性色黄| 国产成人a在一区线观看高清 | 77777奇米 | 热re99久久精品国产99热 | 午夜精品久久久久久久第一页 | 免费久 | 天天综合天天 | 国产午夜精品一二区理论影院 | 岛国毛片一级一级特级毛片 | 日韩中文字幕免费在线观看 | 亚洲爽爽 |