测试环境是 ubuntu 12.03
#coding=UTF-8
import os ,datetime
print ""
# basedir = '/home/lewiskyo/文档/pythonExer/'
#手动输入主目录版本 使用的时候请注释掉上一行的basedir 不注释也可以
# PS: 输入的必须要是绝对路径 除非你查找的只是与这个文件同一目录下的文件
basedir = raw_input("Please input the main directionary or filename (input absolute path):\n")
if os.path.isfile(basedir):
lines = len(open(basedir,'rU').readlines())
print basedir+" : " + str(lines) +"\n"
os._exit(0)
if not os.path.isdir(basedir):
print basedir + " is not a directionary\n"
os._exit(0)
list = os.listdir(basedir)
totalLines = 0
filelist = {}
dirlist = [ basedir]
i = 0
#遍历所有文件夹
while i < len(dirlist):
basedir = dirlist[i]
list = os.listdir(basedir)
#遍历当前文件夹下的所有文件以及文件夹
for j in range(0,len(list)):
path = os.path.join(basedir,list[j])
#若然是文件则把文件名及其行数加入到filelist这个字典中 最后输出
if os.path.isfile( path) and ( not path.endswith("~")):
#读取该文件的行数 包含空行 直到读到EOF
lines = len(open(path,'rU').readlines())
filelist[path] = lines
totalLines += lines
#否则加入到dirlist这个字典中 注意这里不能直接用else 因为上一个判断是排除了以 "~" 结尾的文件
elif os.path.isdir(path):
dirlist.append(path)
i = i+1
#输出文件名以及行数
print ""
for key in filelist:
print '%s : %s' % (key,filelist[key])
print 'TotalLines: ' + str(totalLines) +"\n"
原理就是在遍历一个文件夹过程中, 把文件和行数加入到filelist这个字典中,同时用totallines记录总行数.
把文件夹加入到dirlist这个元组中 遍历这个元组中的所有文件夹,一旦遇到子文件夹,则把这个子文件夹继续加入到元组中.
所以这个元组实质上就是一个队列. 用递归的方法也可以做到.
代码不是很简洁,希望各位能指点指点