python文件处理

系统 1637 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条评论