黄色网页视频 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文件處理

系統 2126 0

文章目錄

  • python文件處理
    • 文件的讀取和關閉
      • 文件的打開
      • 文件的讀取
      • 文件的寫入
      • 文件的關閉
    • 文件的模式
    • 文件的讀取位置
      • 從頭讀取3個字符
      • 從尾部讀取3個字符
    • 實戰1
    • 實戰2

python文件處理

python對文件處理分為兩種,一種是本地處理,而另外一種就是通過網絡數據處理(也就是爬蟲相關),而本地的數據處理,主要是通過文件的都和寫完成

我們先想一想平時對文件處理一般遇到過哪些問題:

  • 如何讀取一個文件的內容,然后處理,最后寫到一個新的文件
  • 如何更改一個文件夾下面的某一些文件名

python的文件處理簡單來說分為以下幾點:

  • 文件的讀寫和關閉
  • 文件的模式
  • 文件的讀取位置

文件的讀取和關閉

python中想要獲取文件里的內容,先要打開文件,然后才能都和寫,而且寫完之后一定要記得關閉

python中對文件的打開是通過open函數來獲取一個句柄

  • 獲取 的句柄,可以用 f.read() 進行讀入
  • 獲取 的句柄 f 之后,就可以 f.weite() 進行寫入
  • 當你文件處理完畢之后,要關閉文件

應該會有人和博主思考的問題一樣:為什么要關閉文件?

因為如果不正常關閉文件,緩沖在內存中的數據就不能真正地寫入到文件中,可能造成數據丟失的現象

文件的打開

            
              file_obj
              
                =
              
              
                open
              
              
                (
              
              filename
              
                ,
              
              mode
              
                =
              
              
                'r'
              
              
                ,
              
              buffering
              
                =
              
              
                -
              
              
                1
              
              
                )
              
              
                # 這里一共有3個參數,第一個是強制參數,后面兩個是可選的
              
              
                # mode可以是讀,也可以是寫,或者是追加,一般默認的是讀文件
              
              
                # buffering主要是設置緩沖區,一般我們都是用-1表示系統默認的緩沖區,若寫100,則表示緩沖區為100
              
            
          

文件的讀取

            
              f
              
                =
              
              
                open
              
              
                (
              
              r
              
                'somefile.txt'
              
              
                )
              
              
f
              
                .
              
              readline
              
                (
              
              
                )
              
              
                # 表示讀文件的一行
              
              
f
              
                .
              
              readlines
              
                (
              
              
                )
              
              
                # 表示把文件從頭到位都讀出來,并保存為一個列表
              
            
          

例如我們現在在D盤的python目錄里面新建

123321.txt

123321.py

打開123321.txt輸入:

              
                
                  123456789
                
                
ABCDEFGHI
IHGFEDCBA

              
            

打開123321.py,寫入代碼如下:

            
              f
              
                =
              
              
                open
              
              
                (
              
              r
              
                '123321.txt'
              
              
                )
              
              
                print
              
              
                (
              
              f
              
                .
              
              readline
              
                (
              
              
                )
              
              
                )
              
              
                print
              
              
                (
              
              f
              
                .
              
              readlines
              
                (
              
              
                )
              
              
                )
              
            
          

運行結果如下:

            
              
                123456789
              
              
                [
              
              
                'ABCDEFGHI\n'
              
              
                ,
              
              
                'IHGFEDCBA'
              
              
                ]
              
            
          

文件的寫入

            
              f
              
                =
              
              
                open
              
              
                (
              
              r
              
                'somefile.txt,'
              
              w'
              
                )
              
              
f
              
                .
              
              write
              
                (
              
              
                )
              
              
                # 表示把字符串寫入
              
              
f
              
                .
              
              writelines
              
                (
              
              
                )
              
              
                # 表示把一個列表寫入
              
              
f
              
                .
              
              close
              
                (
              
              
                )
              
              
                # 表示關閉文件
              
            
          

例如我們現在在D盤的python目錄里面新建

ABCCBA.txt

ABCCBA.py

打開ABCCBA.py,寫入代碼如下:

            
              f
              
                =
              
              
                open
              
              
                (
              
              r
              
                'ABCCBA.txt'
              
              
                ,
              
              
                'w'
              
              
                )
              
              
f
              
                .
              
              write
              
                (
              
              
                '123321'
              
              
                )
              
              
f
              
                .
              
              writelines
              
                (
              
              
                [
              
              
                '\nABCDEFGHI\n'
              
              
                ,
              
              
                'IHGFEDCBA'
              
              
                ]
              
              
                )
              
              
f
              
                .
              
              close
              
                (
              
              
                )
              
            
          

此處在后面如果沒寫入 f.close() ,那么在最后你打開ABCCBA.txt文件后是看不到你寫入的內容的

運行結果:

打開D盤的python目錄下的ABCCBA.txt文件

            
              
                123321
              
              
ABCDEFGHI
IHGFEDCBA

            
          

文件的關閉

此處我介紹兩種關閉方法

1)

            
              f
              
                =
              
              
                open
              
              
                (
              
              r
              
                'somefile.txt'
              
              
                )
              
              
                .
              
              
                .
              
              
                .
              
              
                .
              
              
                .
              
              
                .
              
              
                .
              
              
                .
              
              
                .
              
              
                .
              
              
                .
              
              
                .
              
              
                .
              
              
f
              
                .
              
              close
              
                (
              
              
                )
              
            
          

2)

            
              
                with
              
              
                open
              
              
                (
              
              r
              
                'somefile.txt'
              
              
                )
              
              
                as
              
               f
              
                :
              
              
    f
              
                .
              
              readlines
              
                (
              
              
                )
              
            
          

with用法是python極力推薦的一種使用方法,因為它能夠自動幫你關掉文件,你只需要專注對文件的處理就可以了

文件的模式

在上面我僅僅只列舉了python的讀和寫,那么其他的模式該怎么辦呢?

其實python只需要改變一下open里面的模式參數就可以了

? open函數中的模式參數

描述
‘r’ 讀模式
‘w’ 寫模式
‘a’ 追加模式
‘b’ 二進制模式
‘+’ 讀/寫模式
‘r+’ 以讀寫模式打開
‘w+’ 以讀寫模式打開
‘a+’ 以讀寫模式打開
‘rb’ 以二進制讀模式打開

文件的讀取位置

有時候我們就只想讀取文件中的某一部分,或者我們需要從文章的某一部分開始讀取

那么這就要用到 seek() 函數

            
              file_obj
              
                .
              
              seek
              
                (
              
              offset
              
                ,
              
              whence
              
                =
              
              
                0
              
              
                )
              
              
                # seek 主要是在文件中移動指針,從`whence`(0表示文件的開頭,1表示當前位置,2表示文件的末尾)偏移offset個字符
              
            
          

例如在D盤python目錄下的123321.txt文件

              
                
                  123456789
                
                
ABCDEFGHI
IHGFEDCBA

              
            

從頭讀取3個字符

在當前目錄下創建seek1.py文件,寫入代碼如下:

            
              f
              
                =
              
              
                open
              
              
                (
              
              r
              
                '123321.txt'
              
              
                )
              
              
f
              
                .
              
              seek
              
                (
              
              
                0
              
              
                ,
              
              
                0
              
              
                )
              
              
                print
              
              
                (
              
              f
              
                .
              
              read
              
                (
              
              
                3
              
              
                )
              
              
                )
              
              
f
              
                .
              
              close
              
                (
              
              
                )
              
            
          

運行結果:

            
              
                123
              
            
          

從尾部讀取3個字符

在當前目錄下創建seek2.py文件,寫入代碼如下:

            
              f
              
                =
              
              
                open
              
              
                (
              
              b
              
                '123321.txt'
              
              
                )
              
              
f
              
                .
              
              seek
              
                (
              
              
                -
              
              
                3
              
              
                ,
              
              
                2
              
              
                )
              
              
                print
              
              
                (
              
              f
              
                .
              
              read
              
                (
              
              
                3
              
              
                )
              
              
                )
              
              
f
              
                .
              
              close
              
                (
              
              
                )
              
            
          

運行結果:

            
            
          

實戰1

在D盤python目錄里面創建2019.txt文件,寫入:

              
                hahaha
hary
natasha
mary

              
            

請把2019.txt文件里面的內容都出來,寫到一個新的文件,文件名:9102.txt,格式按照下面這種:

              
                
                  1
                
                
                  :
                
                hahaha

                
                  2
                
                
                  :
                
                hary

                
                  3
                
                
                  :
                
                natasha

                
                  4
                
                
                  :
                
                mary

              
            

在當前目錄下創建test.py,代碼如下:

            
              f
              
                =
              
              
                open
              
              
                (
              
              
                '2019.txt'
              
              
                )
              
              
                # 打開文件
              
              
count
              
                =
              
              f
              
                .
              
              readlines
              
                (
              
              
                )
              
              
                # 從文件中把內容都讀出來,保存到列表中
              
              
                for
              
               i 
              
                in
              
              
                range
              
              
                (
              
              
                0
              
              
                ,
              
              
                len
              
              
                (
              
              count
              
                )
              
              
                )
              
              
                :
              
              
                # 關閉文件
              
              
    count
              
                [
              
              i
              
                ]
              
              
                =
              
              
                str
              
              
                (
              
              i
              
                +
              
              
                1
              
              
                )
              
              
                +
              
              
                ':'
              
              
                +
              
              count
              
                [
              
              i
              
                ]
              
              
                # 遍歷列表,將每一行都加上下標
              
              
                print
              
              
                (
              
              count
              
                )
              
              
f
              
                .
              
              close
              
                (
              
              
                )
              
              
                # 關閉文件
              
              

f
              
                =
              
              
                open
              
              
                (
              
              
                '9102.txt'
              
              
                ,
              
              
                'w'
              
              
                )
              
              
                # 打開文件
              
              
f
              
                .
              
              writelines
              
                (
              
              count
              
                )
              
              
                # 把新的內容寫入文件
              
              
f
              
                .
              
              close
              
                (
              
              
                )
              
            
          

優化重構代碼:

            
              
                def
              
              
                read_File
              
              
                (
              
              
                )
              
              
                :
              
              
                # 把讀文件抽成一個函數
              
              
                with
              
              
                open
              
              
                (
              
              r
              
                '2019.txt'
              
              
                ,
              
              
                'r'
              
              
                )
              
              
                as
              
               f
              
                :
              
              
        read_lines_from_file
              
                =
              
              f
              
                .
              
              readlines
              
                (
              
              
                )
              
              
                return
              
               read_lines_from_file


              
                def
              
              
                write_File
              
              
                (
              
              count
              
                =
              
              
                [
              
              
                ]
              
              
                )
              
              
                :
              
              
                # 把寫文件抽成一個函數
              
              
                with
              
              
                open
              
              
                (
              
              r
              
                '9102.txt'
              
              
                ,
              
              
                'w'
              
              
                )
              
              
                as
              
               f
              
                :
              
              
        f
              
                .
              
              writelines
              
                (
              
              count
              
                )
              
              

new_lines
              
                =
              
              
                [
              
              
                ]
              
              
                # 遍歷列表,將每一行都加上下標
              
              
                for
              
               index
              
                ,
              
              line 
              
                in
              
              
                enumerate
              
              
                (
              
              read_File
              
                (
              
              
                )
              
              
                )
              
              
                :
              
              
    new_lines
              
                .
              
              append
              
                (
              
              
                str
              
              
                (
              
              index
              
                +
              
              
                1
              
              
                )
              
              
                +
              
              
                ':'
              
              
                +
              
              line
              
                )
              
              

write_File
              
                (
              
              new_lines
              
                )
              
            
          

運行結果:

            
              ['1:hahaha\n', '2:hary\n', '3:natasha\n', '4:mary']

            
          

打開9102.txt文件

            
              
                1
              
              :hahaha

              
                2
              
              :hary

              
                3
              
              :natasha

              
                4
              
              :mary

            
          

實戰2

在D盤python目錄下創建hahaha文件夾,網上下載幾張圖片放進去,用代碼將全部照片重命名為1.jpg,2.jpg,3.jpg,…以此類推

在D盤python目錄下創建test2.py,代碼如下:

            
              
                import
              
               os

              
                import
              
               re

              
                import
              
               sys

              
                def
              
              
                renameall
              
              
                (
              
              
                )
              
              
                :
              
              
    fileList 
              
                =
              
               os
              
                .
              
              listdir
              
                (
              
              r
              
                "D:\python\hahaha"
              
              
                )
              
              
                #待修改文件夾
              
              
                print
              
              
                (
              
              
                "修改前:"
              
              
                +
              
              
                str
              
              
                (
              
              fileList
              
                )
              
              
                )
              
              
                #輸出文件夾中包含的文件
              
              
    currentpath 
              
                =
              
               os
              
                .
              
              getcwd
              
                (
              
              
                )
              
              
                #得到進程當前工作目錄
              
              
    os
              
                .
              
              chdir
              
                (
              
              r
              
                "D:\python\hahaha"
              
              
                )
              
              
                #將當前工作目錄修改為待修改文件夾的位置
              
              
    num
              
                =
              
              
                1
              
              
                #名稱變量
              
              
                for
              
               fileName 
              
                in
              
               fileList
              
                :
              
              
                #遍歷文件夾中所有文件
              
              
        pat
              
                =
              
              
                ".+\.(jpg|png|gif)"
              
              
                #匹配文件名正則表達式
              
              
        pattern 
              
                =
              
               re
              
                .
              
              findall
              
                (
              
              pat
              
                ,
              
              fileName
              
                )
              
              
                #進行匹配
              
              
        os
              
                .
              
              rename
              
                (
              
              fileName
              
                ,
              
              
                (
              
              
                str
              
              
                (
              
              num
              
                )
              
              
                +
              
              
                '.'
              
              
                +
              
              pattern
              
                [
              
              
                0
              
              
                ]
              
              
                )
              
              
                )
              
              
                #文件重新命名
              
              
        num 
              
                =
              
               num
              
                +
              
              
                1
              
              
                #改變編號,繼續下一項
              
              
                print
              
              
                (
              
              
                "---------------------------------------------------"
              
              
                )
              
              
    os
              
                .
              
              chdir
              
                (
              
              currentpath
              
                )
              
              
                #改回程序運行前的工作目錄
              
              
    sys
              
                .
              
              stdin
              
                .
              
              flush
              
                (
              
              
                )
              
              
                #刷新
              
              
                print
              
              
                (
              
              
                "修改后:"
              
              
                +
              
              
                str
              
              
                (
              
              os
              
                .
              
              listdir
              
                (
              
              r
              
                "D:\python\hahaha"
              
              
                )
              
              
                )
              
              
                )
              
              
                #輸出修改后文件夾中包含的文件
              
              
renameall
              
                (
              
              
                )
              
            
          

運行結果:

            
              修改前:
              
                [
              
              
                'ACG.GY_01.jpg'
              
              
                ,
              
              
                'ACG.GY_02.jpg'
              
              
                ,
              
              
                'ACG.GY_03.jpg'
              
              
                ,
              
              
                'ACG.GY_04.jpg'
              
              
                ,
              
              
                'ACG.GY_05.jpg'
              
              
                ,
              
              
                'ACG.GY_06.jpg'
              
              
                ,
              
              
                'ACG.GY_07.jpg'
              
              
                ,
              
              
                'ACG.GY_08.jpg'
              
              
                ,
              
              
                'ACG.GY_09.jpg'
              
              
                ,
              
              
                'ACG.GY_10.jpg'
              
              
                ,
              
              
                'ACG.GY_11.jpg'
              
              
                ,
              
              
                'ACG.GY_12.jpg'
              
              
                ,
              
              
                'ACG.GY_13.jpg'
              
              
                ,
              
              
                'ACG.GY_14.jpg'
              
              
                ,
              
              
                'ACG.GY_15.jpg'
              
              
                ,
              
              
                'ACG.GY_16.jpg'
              
              
                ,
              
              
                'ACG.GY_17.jpg'
              
              
                ,
              
              
                'ACG.GY_18.jpg'
              
              
                ,
              
              
                'ACG.GY_19.jpg'
              
              
                ,
              
              
                'ACG.GY_20.jpg'
              
              
                ,
              
              
                'ACG.GY_21.jpg'
              
              
                ,
              
              
                'ACG.GY_22.jpg'
              
              
                ,
              
              
                'ACG.GY_23.jpg'
              
              
                ,
              
              
                'ACG.GY_24.jpg'
              
              
                ]
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
                -
              
              
修改后:
              
                [
              
              
                '1.jpg'
              
              
                ,
              
              
                '2.jpg'
              
              
                ,
              
              
                '3.jpg'
              
              
                ,
              
              
                '4.jpg'
              
              
                ,
              
              
                '5.jpg'
              
              
                ,
              
              
                '6.jpg'
              
              
                ,
              
              
                '7.jpg'
              
              
                ,
              
              
                '8.jpg'
              
              
                ,
              
              
                '9.jpg'
              
              
                ,
              
              
                '10.jpg'
              
              
                ,
              
              
                '11.jpg'
              
              
                ,
              
              
                '12.jpg'
              
              
                ,
              
              
                '13.jpg'
              
              
                ,
              
              
                '14.jpg'
              
              
                ,
              
              
                '15.jpg'
              
              
                ,
              
              
                '16.jpg'
              
              
                ,
              
              
                '17.jpg'
              
              
                ,
              
              
                '18.jpg'
              
              
                ,
              
              
                '19.jpg'
              
              
                ,
              
              
                '20.jpg'
              
              
                ,
              
              
                '21.jpg'
              
              
                ,
              
              
                '22.jpg'
              
              
                ,
              
              
                '23.jpg'
              
              
                ,
              
              
                '24.jpg'
              
              
                ]
              
            
          

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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

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

【本文對您有幫助就好】

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

發表我的評論
最新評論 總共0條評論