最近刚开始学习Python,在学习过程中有一个小作业,让我们写一个检索并输出目录下文件的绝对路径的小脚本。来这里记录一下这个过程。
在系统的“OS”模块中,是有遍历目录这个函数的(后来才知道),先上一个我自己写的——利用函数的递归实现检索并输出文件及文件夹的绝对路径。
#!/usr/bin/python
#coding:utf-8
import os
def panduan():
pathlist = os.listdir(os.getcwd())
for file in pathlist:
if os.path.isdir(os.getcwd()+'/%s' % file):
result.write('%s:'%file+os.getcwd()+'/%s\n'%file) #将文件夹路径写入result.txt文件
os.chdir(os.getcwd()+"/%s"%file)
panduan()
os.chdir('..')
else :
result.write("%s:" % file+os.getcwd()+"/%s\n"%file)
def again():
try:
os.chdir(raw_input('请输入检索的文件目录:'))
except OSError,e:
try :
os.chdir(raw_input('该目录不存在,请再次输入检索的文件目录:'))
except OSError,e:
print "目录不存在,请确认文件目录,并重新运行脚本!"
again()
result = open('result.txt','w+')
panduan()
result.close()
值得注意的是,如果先行调用“again”函数,result.txt文件就会在所输入的目录生成。例如,要检索root目录下,result.txt文件就会生成在root目录下;后调用“again”函数,result.txt文件就会生成在你当前所在的目录。
接下来展示一下通过“OS”模块中的”os.walk()”进行文件目录检索的程序代码:
#!/usr/bin/python
#coding=utf8
import os
path = raw_input("请输入检索文件目录:")
if not os.path.isdir(path):
path = raw_input("该目录不存在,请再次输入检索文件目录:")
if not os.path.isdir(path):
print '目录不存在,请确认文件目录,并重新运行脚本'
exit()
result = open('result.txt','w+')
g = os.walk(path)
for path,d,filelist in g:
for filename in filelist :
result.write('%s:'%filename+os.path.join(path,filename))
result.close()
第一种方法在检索一些涉及更高权限要求的文件目录时,无法全部检索到,且代码书写较复杂。相比之下,利用“OS”模块中的“os.walk()”进行遍历、输出,无论是从代码的书写还是最后结果的输出,都明显优于第一种利用循环语句进行递归得到的结果。