展开菜单
首页 精品内容 本月促销 装机必备 Windows PDF教程 macOS软件 IOS软件 Android AI 专题
全部分类

当前位置:

首页 > 编程开发 > Python中如何使用文件处理方法、os模块和glob模块对文件进行操作?

Python中如何使用文件处理方法、os模块和glob模块对文件进行操作?

一、文件基本的操作1、open()打开文件open()方法用于打开一个文件,并返回File文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出OSError。注意:使用open()方法一定要保证关闭文件对象,即调用close()方法。open()函数常用形式是接收两个参数:文件名(file)和模式(mode)。open(file,mode='r')完整的语法格式为:open(file,mode='r',buffering=-1,encoding=

本文目录

      一、文件基本的操作

      1、open() 打开文件

      open() 方法用于打开一个文件,并返回File文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError。

      注意:使用 open() 方法一定要保证关闭文件对象,即调用 close() 方法。

      open() 函数常用形式是接收两个参数:文件名(file)和模式(mode)。

      open(file, mode='r')

      完整的语法格式为:

      open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True, opener=None)

      2、read() 读文件

      f = open(r'/Users/mac/desktop/jupyter/pythonCourseware/32.txt', mode='r')# read模式打开文件
      data = f.read() # 读取文件内容,向操作系统发起读请求,会被操作系统转成具体的硬盘操作,将内容由硬盘读入内存
      print(data)
      # 由于Python的垃圾回收机制只回收引用计数为0的变量,但是打开文件还占用操作系统的资源,所以我们需要回收操作系统的资源资源
      # del f 只是回收变量f
      f.close()

      3、write()写文件:

      # write模式打开文件
      f = open(r'/Users/mac/desktop/jupyter/pythonCourseware/32.txt', mode='w')
      f.write("""name = 'nick'
      pwd = '123'""")
      f.close()

      4、with open()方法

      with open()方法不仅提供自动释放操作系统占用资源的方法,并且with open可以使用逗号分隔,一次性打开多个文件,实现文件的快速拷贝。

      with open('32.txt', 'rt', encoding='utf8') as f:
          print(f.read())
      
      with open('32.txt', 'rb') as fr, \
              open('35r.txt', 'wb') as fw:
          f.write(f.read())

      二、文件的打开模式

      文件操作的基础模式有四种

      • r模式:(默认)只读模式,只能读不能写,文件的指针将会放在文件的开头,文件不存在时报错。

      • w模式:覆盖写模式,文件不存在则创建, 并从开头开始编辑,即原有内容会被删除,即完全覆盖。

      • a模式:追加写模式:文件不存在则创建,存在则在文件最后追加内容,就是说,新的内容将会被写入到已有内容之后。

      文件读写内容的格式有两种

      • t模式为text (默认):文本模式

      • b模式为bytes:字节模式。

      需要注意的是:t、b这两种模式均不能单独使用,都需要与r/w/a之一连用。

      1、文件r打开模式

      1、读文本
      # rt: read by text
      # windows的操作系统默认编码为gbk,因此需要使用utf8编码
      f = open('32.txt', mode='rt', encoding='utf8')
      data = f.read()
      print(data) # nick最帅吗
      print(type(data)} # 
      f.close()
      2、读字节
      # rb: read by bytes
      f = open('32.txt', mode='rb')
      data = f.read()
      print(data) # b'aaa\nbbb\nccc\nnick\xe6\x9c\x80\xe5\xb8\x85\xe5\x90\x97'
      print(type(data)) # 
      f.close()
      3、for逐行读取,相当于readline。
      fname = input("请输入要打开的文件名称:")
      fo = open(fname, "r")
      print(type(fo))  # 
      for line in fo:
          print(line)
      fo.close()
      4、读方法:
      • read(size):一次性读取文件的所有内容,如果给出参数,读入前size长度。

      • readline(size):读入一行内容,包括换行符为 '\n'。如果给出参数,读入该行前size长度。下次可以接着上次读完的地方继续读。f.readline() 如果返回一个空字符串, 说明已经已经读取到最后一行。

      • readlines([sizeint]):读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比 sizeint 较大, 因为需要填充缓冲区。

      f = open('32.txt', mode='rt', encoding='utf8')
      print(f.readable())  #True 判断文件是否可读
      data1 = f.readline()
      data2 = f.readlines()
      print(data1) # aaa
      print(data2) # ['bbb\n', 'ccc\n', 'nick最帅吗']
      f.close()

      2、文件W打开模式

      只能写,不能读,文件存在的时候回清空文件后再写入内容;文件不存在的时候会创建文件后写入内容。

      1、文本模式
      f = open('34w.txt', mode='wt', encoding='utf8')
      print(f"f.readable(): {f.readable()}") #False
      f.write('nick 真帅呀\n')  # '\n'是换行符
      f.write('nick,nick, you drop, I drop.')
      f.write('nick 帅的我五体投地')
      f.flush()  # 立刻将文件内容从内存刷到硬盘
      f.close()
      2、字节模式
      f = open('34a.txt', mode='wb')
      f.write('nick 帅的我五体投地'.encode('unicode_escape') )  # 编码成bytes类型再写入
      print(type('nick 帅的我五体投地'.encode('unicode_escape'))) #
      f.close()

      注意:b模式是通用的模式,因为所有的文件在硬盘中都是以二进制的形式存储的。

      需要注意的是:b模式读写文件,一定不能加上encoding参数,因为二进制无法再编码。

      try:
          import requests
      
          response = requests.get( 'https://cache.yisu.com/upload/information/20220528/112/3002.jpg')
          data = response.content
      
          f = open('mv.jpg', 'wb')
          f.write(data)
          print('done...')
          f.close()
      except Exception as e:
          print(e, '报错了,那就算了吧,以后爬虫处会详细介绍')
      3、写方法:
      • write(s):将字符串写入文件,返回的是写入的字符长度。

      • writelines(lines):向文件写入一个多行字符串列表,如果需要换行则要自己加入每行的换行符。

      • flush():刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入。

      3、文件a打开模式

      a: 可以追加。文件存在,则在文件的末端写入内容;文件不存在的时候会创建文件后写入内容。

      # at
      f = open('34a.txt', mode='at', encoding='utf8')
      print(f.readable()) # False
      f.write('nick 真帅呀\n')  # '\n'是换行符
      f.write('nick,nick, you drop, I drop.')
      f.write('nick 帅的我五体投地')
      f.close()

      4、+可读、可写

      • r+ :可读、可写。文件指针将会放在文件的开头。

      • rb+: 可读、可写二进制格式

      • w+: 可写、可读。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。

      • wb+: 可写、可读 二进制格式

      • a+: 可追加、可读。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。

      • ab+: 可追加、可读二进制格式

      # r+t
      with open('32.txt', 'r+', encoding='utf-8') as fr:
          print(fr.readable())  # True
          print(fr.writable())  # True

      三、文件指针操作

      但凡涉及文件指针的都是字节个数。

      1、seek(offset, from_what) :改变当前文件操作指针的位置

      from_what 的值, 如果是 0 表示开头, 如果是 1 表示当前位置, 2 表示文件的结尾,例如:

      • seek(x,0) : 从起始位置即文件首行首字符开始移动 x 个字符

      • seek(x,1) : 表示从当前位置往后移动x个字符

      • seek(-x,2):表示从文件的结尾往前移动x个字符

      from_what 值为默认为0,即文件开头。

      f.seek(0) # 回到文件开头

      下面给出一个完整的例子:

      f = open('32.txt', 'rb+')
      print(f.write(b'0123456789abcdef')) # 16
      print(f.seek(5))  # 移动到文件的第六个字节 # 5
      print(f.read(1))  # b'5'
      print(f.seek(-3, 2))  # 移动到文件的倒数第三字节 # 13
      print(f.read(1)) # b'd'

      2、tell():告诉文件当前位置。

      每次统计都是从文件开头到当前指针所在位置

      with open('32.txt', 'rb') as fr:
          fr.seek(4, 0)
          print(fr.tell() )  # 4

      3、truncate([size]):截断

      从文件的首行首字符开始截断,截断文件为 size 个字符,无 size 表示从当前位置截断;

      截断之后后面的所有字符被删除,其中 Widnows 系统下的换行代表2个字符大小。

      文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate()要在r+或a或a+等模式下测试效果。它的参照物永远是文件头。

      truncate()不加参数,相当于清空文件。

      with open('32.txt', 'ab') as fr:
          fr.truncate(2)  # 截断2个字节后的所有字符,如果3个字节一个字符,只能截断2/3个字符,还会遗留1/3个字符,会造成乱码

      四、文件修改的两种方式

      以读的方式打开原文件,以写的方式打开一个新的文件,把原文件的内容进行修改(一行一行的修改或者全部修改),然后写入新文件,之后利用os模块的方法,把原文件删除,重命名新文件为原文件名,达到以假乱真的目的。

      方式1、将硬盘存放的该文件的内容全部加载到内存,在内存中是可以修改的,修改完毕后,再由内存覆盖到硬盘(word,vim,nodpad++等编辑器)。

      import os
      
      with open('37r.txt') as fr, open('37r_swap.txt', 'w') as fw:
          data = fr.read()  # 全部读入内存,如果文件很大,会很卡
          data = data.replace('tank', 'tankSB')  # 在内存中完成修改
      
          fw.write(data)  # 新文件一次性写入原文件内容
      
      # 删除原文件
      os.remove('37r.txt')
      # 重命名新文件名为原文件名
      os.rename('37r_swap.txt', '37r.txt')

      方式2、将硬盘存放的该文件的内容一行一行地读入内存,修改完毕就写入新文件,最后用新文件覆盖源文件。

      import os
      
      with open('37r.txt') as fr, open('37r_swap.txt', 'w') as fw:
           for line in fr: # 循环读取文件内容,逐行修改
              line = line.replace('jason', 'jasonSB')
              fw.write(line)  # 新文件写入原文件修改后内容
      
      os.remove('37r.txt')
      os.rename('37r_swap.txt', '37r.txt')

      五、os文件处理模块

      os模块负责程序与操作系统的交互,提供了访问操作系统底层的接口,多用于文件处理。

      import os

      1、os模块

      • os.getcwd():获取当前工作目录,即当前python脚本工作的目录路径

      • os.chdir("dirname"):改变当前工作目录;相当于shell下cd

      • os.curdir:返回当前目录: ('.')

      • os.pardir:获取当前目录的父目录字符串名:('..')

      • os.listdir('dirname'):列出指定目录下的所有文件和子目录,包括隐藏文件,并以列表方式打印

      • os.chmod(path, mode):更改权限

      • os.mkdir('dirname'):生成单级目录;相当于shell中mkdir dirname

      • os.makedirs('dirname1/dirname2'):可生成多层递归目录

      • os.remove(path):删除路径为path的文件。如果path 是一个文件夹,将抛出OSError; 查看下面的rmdir()删除一个 directory。

      • os.removedirs('dirname1'):若目录为空,则删除,并递归到上一级目录,如若也为空,则删除,依此类推

      • os.rmdir('dirname'):删除单级空目录,若目录不为空则无法删除,报错;相当于shell中rmdir dirname

      • os.rename("oldname","newname"):重命名文件/目录

      • os.renames(old, new):递归地对目录进行更名,也可以对文件进行更名。

      • os.stat('path/filename'):获取文件/目录信息

      • os.sep:输出操作系统特定的路径分隔符,win下为"\",Linux下为"/"

      • os.linesep:输出当前平台使用的行终止符,win下为"\t\n",Linux下为"\n"

      • os.pathsep:输出用于分割文件路径的字符串 win下为;,Linux下为:

      • os.name:输出字符串指示当前使用平台。win->'nt'; Linux->'posix'

      • os.system("bash command"):运行shell命令,直接显示

      • os.environ:获取系统环境变量

      2、os.path 模块

      主要用于获取文件的属性。

      以下是 os.path 模块的几种常用方法:

      • os.path.abspath(path):返回path规范化的绝对路径

      • os.path.split(path):将path分割成目录和文件名二元组返回

      • os.path.splitdrive(path):一般用在 windows 下,返回驱动器名和路径组成的

      • os.path.splitext(path):分割路径,返回路径名和文件扩展名的元组

      • os.path.dirname(path):返回path的目录名。其实就是os.path.split(path)的第一个元素

      • os.path.basename(path):返回path最后的文件名。如何path以/或\结尾,那么就会返回空值。即os.path.split(path)的第二个元素

      • os.path.exists(path):如果path存在,返回True;如果path不存在,返回False

      • os.path.isabs(path):如果path是绝对路径,返回True

      • os.path.isfile(path):如果path是一个存在的文件,返回True。否则返回False

      • os.path.isdir(path):如果path是一个存在的目录,则返回True。否则返回False

      • os.path.join(path2[, path3[, ...]]):将多个路径组合后返回,第一个绝对路径之前的参数将被忽略

      • os.path.getatime(path):返回path所指向的文件或者目录的最后存取时间

      • os.path.getmtime(path):返回path所指向的文件或者目录的最后修改时间

      • os.path.getsize(path): 返回文件大小,如果文件不存在就返回错误

      3、实例:

      1、获取指定目录及其子目录下的 py 文件

      import os
      import os.path
      
      """获取指定目录及其子目录下的 py 文件路径说明:l 用于存储找到的 py 文件路径 get_py 函数,递归查找并存储 py 文件路径于 l"""
      l = []
      
      
      def get_py(path, l):
          file_list = os.listdir(path)  # 获取path目录下所有文件
          for filename in file_list:
              path_tmp = os.path.join(path, filename)  # 获取path与filename组合后的路径
              if os.path.isdir(path_tmp):  # 如果是目录
                  get_py(path_tmp, l)  # 则递归查找
              elif filename[-3:].upper() == '.PY':  # 不是目录,则比较后缀名
                  l.append(path_tmp)
      
      
      path = input('请输入路径:').strip()
      get_py(path, l)
      print('在%s目录及其子目录下找到%d个py文件\n分别为:\n' % (path, len(l)))
      for filepath in l:
          print(filepath + '\n')

      2、显示所有视频格式文件,mp4,avi,rmvb

      import os
      
      vedio_list = []
      
      def search_file(start_dir, target) :
          os.chdir(start_dir)
          
          for each_file in os.listdir(os.curdir) :
              ext = os.path.splitext(each_file)[1]
              if ext in target :
                  vedio_list.append(os.getcwd() + os.sep + each_file + os.linesep) 
              if os.path.isdir(each_file) :
                  search_file(each_file, target) # 递归调用
                  os.chdir(os.pardir) # 递归调用后切记返回上一层目录
      
      start_dir = input('请输入待查找的初始目录:')
      program_dir = os.getcwd()
      
      target = ['.mp4', '.avi', '.rmvb']
      
      search_file(start_dir, target)
      
      f = open(program_dir + os.sep + 'vedioList.txt', 'w')
      f.writelines(vedio_list)
      f.close()

      3、批量修改文件名

      import os
      
      path = input('请输入文件路径(结尾加上/):')
      
      # 获取该目录下所有文件,存入列表中
      fileList = os.listdir(path)
      
      n = 0
      for i in fileList:
          # 设置旧文件名(就是路径+文件名)
          oldname = path + os.sep + fileList[n]  # os.sep添加系统分隔符
      
          # 设置新文件名
          newname1 = path + os.sep + 'a' + str(n + 1) + '.JPG'
      
          os.rename(oldname, newname1)  # 用os模块中的rename方法对文件改名c:\
          print(oldname, '======>', newname1)
      
          n += 1

      七、glob模块:使用通配符查找文件

      用它可以查找符合特定规则的文件路径名。跟使用windows下的文件搜索差不多。

      查找文件只用到三个匹配符:“*”, “?”, “[]”。

      • “*”:匹配0个或多个字符;

      • “?”:匹配单个字符;

      • “[]”:匹配指定范围内的字符,如:[0-9]匹配数字。

      1、glob.glob:返回所有匹配的文件路径列表。

      它只有一个参数pathname,定义了文件路径匹配规则,这里可以是绝对路径,也可以是相对路径。

      输出:类型是list型,然后就是输出相关的文件路径了

      import glob
      
      file = glob.glob(r'C:\工具\*\*\pan*.exe')
      print(type(file))  # 
      print(file)  # ['C:\\工具\\PanDownload_v2.1.3\\PanDownload\\PanDownload.exe']
      
      #获取上级目录的所有.py文件
      print (glob.glob(r'../*.py')) #相对路径

      2、glob.iglob:获取一个可遍历对象,使用它可以逐个获取匹配的文件路径名。

      与glob.glob()的区别是:glob.glob同时获取所有的匹配路径,而glob.iglob一次只获取一个匹配路径。

      下面是一个简单的例子:

      import glob
      
      #父目录中的.py文件
      f = glob.iglob(r'../*.py')
      print ( f ) # 
      for py in f:
         print  (py)
      本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
      作者最新文章
      编程开发 Python
      相关文章 更多
      精品专题 更多
      装机必备

      正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

      Windows

      正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

      PDF教程

      正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

      macOS软件

      正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

      IOS软件

      正软商城iOS软件专区,精选适用于iPhone和iPad的办公、学习、影音、设计、效率及AI应用,提供功能介绍、适用设备、系统要求和正版获取方式等信息。

      AI

      正软商城AI软件专区,汇集AI写作、AI绘画、AI视频、AI办公、AI编程、AI翻译、智能客服和数据分析等人工智能工具,提供功能介绍、适用平台、收费方式及正版购买信息。

      Mac软件 更多
      Aperty macOS版
      Aperty macOS版

      Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

      火山引擎 网页版
      火山引擎 网页版

      火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

      立刻MV 网页版
      立刻MV 网页版

      立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

      蛙蛙写作 网页版
      蛙蛙写作 网页版

      蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

      讯飞智作 网页版
      讯飞智作 网页版

      讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

      超级简历WonderCV 网页版
      超级简历WonderCV 网页版

      超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

      音述AI 网页版
      音述AI 网页版

      音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

      AionClaw macOS版
      AionClaw macOS版

      AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

      Loomy macOS版
      Loomy macOS版

      Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。

      AirBuddy 3 macOS版
      AirBuddy 3 macOS版

      AirBuddy 3 是面向 macOS 的蓝牙外设增强工具,可集中查看 AirPods、Beats 与苹果设备电量,提供快速连接、播放控制、电量提醒、桌面小组件和多台 Mac 外设接力等功能。

      AirServer macOS版
      AirServer macOS版

      AirServer macOS版可把 Mac 转换为无线投屏接收端,通过 AirPlay 或 Google Cast 接收手机、平板和电脑画面,并支持多设备同时连接、高清镜像及会话录制,适合家庭娱乐、课堂教学、会议演示和应用展示。

      AnyDesk macOS版
      AnyDesk macOS版

      AnyDesk macOS版是一款适用于远程办公、设备维护和客户支持的远程桌面工具,可连接并操作异地计算机,支持文件传输、无人值守访问、会话权限控制及跨平台协作。

      WINDOWS 更多
      讯飞绘文 网页版
      讯飞绘文 网页版

      讯飞绘文网页版是科大讯飞推出的AI图文创作与内容运营工具,覆盖热点选题、文章生成、稿件校对、智能配图、排版发布和数据复盘等环节,适合自媒体创作者及内容团队在线使用。

      Maya(Autodesk Maya) Windows版
      Maya(Autodesk Maya) Windows版

      Autodesk Maya 是面向影视、电视、动画和游戏行业的专业三维制作软件,集多边形与 NURBS 建模、角色绑定、关键帧和动作捕捉动画、Bifrost 特效模拟、材质开发及 Arnold 渲染于一体,

      Aperty Windows版
      Aperty Windows版

      Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

      火山引擎 网页版
      火山引擎 网页版

      火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

      立刻MV 网页版
      立刻MV 网页版

      立刻MV 面向音乐人、内容创作者和品牌团队,帮助用户低成本完成歌曲 MV、歌词视频、AI 分镜、图生视频与最终合成。

      蛙蛙写作 网页版
      蛙蛙写作 网页版

      蛙蛙写作 AI 创作工具,覆盖小说、剧本、文案,一键生成文稿,打通文字转视频全流程,高效解决创作难题。

      讯飞智作 网页版
      讯飞智作 网页版

      讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

      超级简历WonderCV 网页版
      超级简历WonderCV 网页版

      超级简历WonderCV是面向应届生和AI小白的智能求职平台,覆盖简历、面试与职业规划。

      音述AI 网页版
      音述AI 网页版

      音述AI,是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区。

      AionClaw Windows版
      AionClaw Windows版

      AionClaw 是可在桌面端运行的任务型 AI 助手,通过数字专家与技能市场组合办公、创作、数据和开发能力。

      Loomy Windows版
      Loomy Windows版

      Loomy 是科大讯飞推出的桌面 AI 助手,可通过对话、任务与工作目录协助处理办公、内容创作和资料整理。

      AirServer Windows版
      AirServer Windows版

      AirServer Windows版可把电脑变成AirPlay、Google Cast和Miracast无线投屏接收端,适合会议演示、课堂教学及家庭大屏分享。发送设备通常无需另装客户端,并可同时接收和智能排列多个镜像会话。