当前位置: 首页 > 编程笔记 >

python中遍历文件的3个方法

凌琦
2023-03-14
本文向大家介绍python中遍历文件的3个方法,包括了python中遍历文件的3个方法的使用技巧和注意事项,需要的朋友参考一下

今天写一个在windows下批量修改文件名的python脚本,用到文件的遍历。用python进行文件遍历有多种方法,这里列举并说明一下。

os.path.walk()

这是一个传统的用法。

walk(root,callable,args)方法有三个参数:要遍历的目录,回调函数,回调函数的参数(元组形式)。

调用的过程是遍历目录下的文件或目录,每遍历一个目录,调用回调函数,并把args作为参数传递给回调函数

回调函数定义时也有三个参数,比如示例中的func中的三个参数,分别为walk传来的参数、目录的路径、目录下的文件列表(只有文件名,不是完整路径)。请看示例:


import os

s = os.sep #根据unix或win,s为\或/

root = "d:" + s + "ll" + s #要遍历的目录

def func(args,dire,fis): #回调函数的定义     for f in fis:         fname = os.path.splitext(f)  #分割文件名为名字和扩展名的二元组         new = fname[0] + 'b' + fname[1]  #改名字         os.rename(os.path.join(dire,f),os.path.join(dire,new)) #重命名

os.path.walk(root,func,()) #遍历

这种方法在使用时有个问题,不能递归遍历下一层(这点我还不确定,欢迎指正)。

python的高级版本中加入了os.walk(),比这个好用。

os.walk()

原型为:os.walk(top, topdown=True, onerror=None, followlinks=False)

我们一般只使用第一个参数。(topdown指明遍历的顺序)
该方法对于每个目录返回一个三元组,(dirpath, dirnames, filenames)。第一个是路径,第二个是路径下面的目录,第三个是路径下面的非目录(对于windows来说也就是文件)。请看示例:


import os

s = os.sep

root = "d:" + s + "ll" + s 

for rt, dirs, files in os.walk(root):     for f in files:         fname = os.path.splitext(f)         new = fname[0] + 'b' + fname[1]         os.rename(os.path.join(rt,f),os.path.join(rt,new))

这种方式可以递归遍历所有的文件。

listdir

可以使用os模块下的几个方法组合起来进行遍历。请看示例:


import os

s = os.sep

root = "d:" + s + "ll" + s

for i in os.listdir(root):     if os.path.isfile(os.path.join(root,i)):         print i

这里需要注意的是,其中的i是目录或文件名,不是完整的路径,在使用时要结合os.path.join()方法还原完整路径。

遍历搞定之后,文件名的修改可以使用正则表达式做一些高级的处理。

另外,还可以使用os.system(cmd)来调用shell里面的相关命令对文件进行处理,很好很强大。

 类似资料:
  • 问题内容: 在Python 3中遍历一个对象时,将单个对象获取为: 如何获取1个长度的对象呢? 以下是可能的,但对读者来说不是很明显,并且很可能表现不佳: 问题答案: 如果您担心此代码的性能,并且a字节不适合您的情况,那么您可能应该重新考虑使用的数据结构,例如使用对象代替。 您可以对对象进行切片以获得1个长度的对象: 有PEP 0467-针对二进制序列的次要API改进 ,提出了以下方法:

  • 本文向大家介绍Python遍历文件夹 处理json文件的方法,包括了Python遍历文件夹 处理json文件的方法的使用技巧和注意事项,需要的朋友参考一下 有两种做法:os.walk()、pathlib库,个人感觉pathlib库的path.glob用来匹配文件比较简单。 下面是第二种做法的实例(第一种做法百度有很多文章): 运行结果 目录结构 json file内容 以上这篇Python遍历文件

  • 问题内容: 我已经有一段时间没有编码了,并试图重新使用Python。我正在尝试编写一个简单的程序,通过将每个数组元素值相加来求和一个数组。这就是我所拥有的: 我收到以下错误: 我发现我想做的事情显然很简单: 但是很明显,我无论如何都不正确地遍历数组,我认为这是我需要为其他目的而正确学习的东西。谢谢! 问题答案: 当您像在数组中那样循环时,for变量(在此示例中)是数组的当前元素。 例如,如果你的就

  • 本文向大家介绍python字典的遍历3种方法详解,包括了python字典的遍历3种方法详解的使用技巧和注意事项,需要的朋友参考一下 遍历字典: keys() 、values() 、items()   1. xxx.keys() : 返回字典的所有的key 返回一个序列,序列中保存有字典的所有的键   效果图:   代码: 2. xxx.values() : 返回字典所有的值   效果图:   代码

  • 问题内容: 这个问题已经在这里有了答案 : 第二次遍历文件不起作用 (4个答案) 去年关闭。 我有一个文件,其中某些名称逐行列出。 现在,我试图遍历这些内容,但是我无法这样做。 file.readlines()将文件的行打印为列表。所以我得到这个: 但是,当我遍历此列表时,我无法这样做。 另外,当我将其分配给倒数第二行中的变量“ topology_list”并打印时。它给了我一个空的清单。 所以我

  • 问题内容: 我有一个带有一些十六进制数字的文本文件,我正在尝试将其转换为十进制。我可以成功转换它,但似乎在循环存在之前它会读取一些不需要的字符,因此我遇到了以下错误。 我的代码如下 每个十六进制数字都在新行中输入 问题答案: 追溯表明文件末尾可能有一个空行。您可以这样解决: 另一方面,最好使用代替。不要忘记关闭文件,或者更好地使用该文件来关闭它们: