在linux系统下遍历文件不算是新鲜功能,如果给出一个目录,要根据这个目录的结构去做某些操作,这个就要到遍历了,谈到遍历就不能不说递归,因为遍历是递归的典型应用场景,那什么是递归?其实递归就是定义的函数又调用了自己,比如列出指定目录下的所有文件,如果这个目录下除了文件还有目录,就就需要再进入这个子目录里,依次类推直到没有目录了结束,递归比较抽象,我们直接上例子说明:
#!/usr/mport os
import os
def Rec(path):
all_files = os.listdir(path)
for file in all_files:
pf = os.path.join(path,file)
if os.path.isdir(pf):
Rec(pf)
else:
print os.path.join(path,pf)
Rec('/root/script')
这就是一个简单的列子,例子中如果变量pf是目录,就再调用Rec函数,如果不是就直接打印出目录和文件内容。
如果以上的例子比较难理解,那大家也不用担心,谁让咱用的是python这门大神的语言呢, 因为在python里已经给我们提供了一个os.walk()函数帮我们解决了这个较为烧脑的问题,这个函数接受一个目录,然后返回一个三元组tupple(dirpath, dirnames, filenames),,分别表示:
根路径,根路径下的子目录列表,根路径下的所有文件列表。
所以要遍历一个目录下文件,最后用os.path.join(dirpath, name).就可以得到文件的全路径了,我们来个实际例子,比如我要备份1台机器上的所有conf文件,我们采用os.walk()函数可以这样遍历所有系统的conf文件,然后拷贝到我们指定的目录中去,脚本如下:
import os, shutil, sys
if not os.geteuid()==0:
sys.exit(0)
if not os.path.isdir("/backup"):
os.mkdir("/backup", 384)
for root, dirs, files in os.walk('/'):
for filename in files:
if ".conf" in filename:
abspath = os.path.join(root, filename)
shutil.copy2(abspath, "/backup")
有了这个os.walk()函数可以帮我们很快遍历指定的文件夹内容,所以在实际中非常有用
标签:文件,遍历,python,pf,path,os,目录 来源: https://blog.51cto.com/15060540/2651687
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。