日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

python文件處理

系統(tǒng) 1951 0

文章目錄

  • python文件處理
    • 文件的讀取和關(guān)閉
      • 文件的打開(kāi)
      • 文件的讀取
      • 文件的寫(xiě)入
      • 文件的關(guān)閉
    • 文件的模式
    • 文件的讀取位置
      • 從頭讀取3個(gè)字符
      • 從尾部讀取3個(gè)字符
    • 實(shí)戰(zhàn)1
    • 實(shí)戰(zhàn)2

python文件處理

python對(duì)文件處理分為兩種,一種是本地處理,而另外一種就是通過(guò)網(wǎng)絡(luò)數(shù)據(jù)處理(也就是爬蟲(chóng)相關(guān)),而本地的數(shù)據(jù)處理,主要是通過(guò)文件的都和寫(xiě)完成

我們先想一想平時(shí)對(duì)文件處理一般遇到過(guò)哪些問(wèn)題:

  • 如何讀取一個(gè)文件的內(nèi)容,然后處理,最后寫(xiě)到一個(gè)新的文件
  • 如何更改一個(gè)文件夾下面的某一些文件名

python的文件處理簡(jiǎn)單來(lái)說(shuō)分為以下幾點(diǎn):

  • 文件的讀寫(xiě)和關(guān)閉
  • 文件的模式
  • 文件的讀取位置

文件的讀取和關(guān)閉

python中想要獲取文件里的內(nèi)容,先要打開(kāi)文件,然后才能都和寫(xiě),而且寫(xiě)完之后一定要記得關(guān)閉

python中對(duì)文件的打開(kāi)是通過(guò)open函數(shù)來(lái)獲取一個(gè)句柄

  • 獲取 的句柄,可以用 f.read() 進(jìn)行讀入
  • 獲取 寫(xiě) 的句柄 f 之后,就可以 f.weite() 進(jìn)行寫(xiě)入
  • 當(dāng)你文件處理完畢之后,要關(guān)閉文件

應(yīng)該會(huì)有人和博主思考的問(wèn)題一樣:為什么要關(guān)閉文件?

因?yàn)槿绻徽jP(guān)閉文件,緩沖在內(nèi)存中的數(shù)據(jù)就不能真正地寫(xiě)入到文件中,可能造成數(shù)據(jù)丟失的現(xiàn)象

文件的打開(kāi)

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

文件的讀取

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

例如我們現(xiàn)在在D盤(pán)的python目錄里面新建

123321.txt

123321.py

打開(kāi)123321.txt輸入:

              
                
                  123456789
                
                
ABCDEFGHI
IHGFEDCBA

              
            

打開(kāi)123321.py,寫(xiě)入代碼如下:

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

運(yùn)行結(jié)果如下:

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

文件的寫(xiě)入

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

例如我們現(xiàn)在在D盤(pán)的python目錄里面新建

ABCCBA.txt

ABCCBA.py

打開(kāi)ABCCBA.py,寫(xiě)入代碼如下:

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

此處在后面如果沒(méi)寫(xiě)入 f.close() ,那么在最后你打開(kāi)ABCCBA.txt文件后是看不到你寫(xiě)入的內(nèi)容的

運(yùn)行結(jié)果:

打開(kāi)D盤(pán)的python目錄下的ABCCBA.txt文件

            
              
                123321
              
              
ABCDEFGHI
IHGFEDCBA

            
          

文件的關(guān)閉

此處我介紹兩種關(guān)閉方法

1)

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

2)

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

with用法是python極力推薦的一種使用方法,因?yàn)樗軌蜃詣?dòng)幫你關(guān)掉文件,你只需要專(zhuān)注對(duì)文件的處理就可以了

文件的模式

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

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

? open函數(shù)中的模式參數(shù)

描述
‘r’ 讀模式
‘w’ 寫(xiě)模式
‘a(chǎn)’ 追加模式
‘b’ 二進(jìn)制模式
‘+’ 讀/寫(xiě)模式
‘r+’ 以讀寫(xiě)模式打開(kāi)
‘w+’ 以讀寫(xiě)模式打開(kāi)
‘a(chǎn)+’ 以讀寫(xiě)模式打開(kāi)
‘rb’ 以二進(jìn)制讀模式打開(kāi)

文件的讀取位置

有時(shí)候我們就只想讀取文件中的某一部分,或者我們需要從文章的某一部分開(kāi)始讀取

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

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

例如在D盤(pán)python目錄下的123321.txt文件

              
                
                  123456789
                
                
ABCDEFGHI
IHGFEDCBA

              
            

從頭讀取3個(gè)字符

在當(dāng)前目錄下創(chuàng)建seek1.py文件,寫(xiě)入代碼如下:

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

運(yùn)行結(jié)果:

            
              
                123
              
            
          

從尾部讀取3個(gè)字符

在當(dāng)前目錄下創(chuàng)建seek2.py文件,寫(xiě)入代碼如下:

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

運(yùn)行結(jié)果:

            
            
          

實(shí)戰(zhàn)1

在D盤(pán)python目錄里面創(chuàng)建2019.txt文件,寫(xiě)入:

              
                hahaha
hary
natasha
mary

              
            

請(qǐng)把2019.txt文件里面的內(nèi)容都出來(lái),寫(xiě)到一個(gè)新的文件,文件名:9102.txt,格式按照下面這種:

              
                
                  1
                
                
                  :
                
                hahaha

                
                  2
                
                
                  :
                
                hary

                
                  3
                
                
                  :
                
                natasha

                
                  4
                
                
                  :
                
                mary

              
            

在當(dāng)前目錄下創(chuàng)建test.py,代碼如下:

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

f
              
                =
              
              
                open
              
              
                (
              
              
                '9102.txt'
              
              
                ,
              
              
                'w'
              
              
                )
              
              
                # 打開(kāi)文件
              
              
f
              
                .
              
              writelines
              
                (
              
              count
              
                )
              
              
                # 把新的內(nèi)容寫(xiě)入文件
              
              
f
              
                .
              
              close
              
                (
              
              
                )
              
            
          

優(yōu)化重構(gòu)代碼:

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


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

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

write_File
              
                (
              
              new_lines
              
                )
              
            
          

運(yùn)行結(jié)果:

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

            
          

打開(kāi)9102.txt文件

            
              
                1
              
              :hahaha

              
                2
              
              :hary

              
                3
              
              :natasha

              
                4
              
              :mary

            
          

實(shí)戰(zhàn)2

在D盤(pán)python目錄下創(chuàng)建hahaha文件夾,網(wǎng)上下載幾張圖片放進(jìn)去,用代碼將全部照片重命名為1.jpg,2.jpg,3.jpg,…以此類(lèi)推

在D盤(pán)python目錄下創(chuàng)建test2.py,代碼如下:

            
              
                import
              
               os

              
                import
              
               re

              
                import
              
               sys

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

運(yùn)行結(jié)果:

            
              修改前:
              
                [
              
              
                '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'
              
              
                ]
              
            
          

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

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

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

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

【本文對(duì)您有幫助就好】

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 聂拉木县| 左权县| 富蕴县| 枣强县| 佛教| 沙洋县| 朝阳市| 洛宁县| 林州市| 延吉市| 玉树县| 米泉市| 青龙| 淮滨县| 象山县| 沽源县| 和政县| 郁南县| 缙云县| 甘洛县| 平和县| 云龙县| 白山市| 南陵县| 平南县| 修文县| 杭锦后旗| 海口市| 宜宾县| 车致| 新绛县| 门头沟区| 铁岭市| 长海县| 天镇县| 无锡市| 丰县| 永平县| 林州市| 交口县| 宝坻区|