Python:遍历一个目录下所有的文件及文件夹,然后计算每个文件的字符和line的小程序

时间:2024-01-10 22:14:26

编写了一个遍历一个目录下所有的文件及文件夹,然后计算每个文件的字符和line的小程序,先把程序贴出来。

#coding=utf-8

'''
Created on 2014年7月14日 @author: Administrator
'''
import os
import os.path
rootdir =r'c:\python27\jiaoben' filefullnames=[]
def traverse(rootdir,filefullnames):
for parent,dirnames,filenames in os.walk(rootdir):
for dirname in dirnames: #case1
print 'parent is :'+parent
print 'dirname is:'+dirname
for filename in filenames: #case2
print 'parent is:'+parent
print 'filename is:'+filename
print 'the full name of the file is:'+os.path.join(parent,filename)
filefullnames.append(os.path.join(parent,filename))
def linestr(filefullname,linecount=0,charactercount=0):
a= open(filefullname,'r')
k=a.read()
charactercount=len(k)
linecount =k.count('\n')
#print filefullname+':'+linecount+charactercount+'\n'
b =open (r'c:\python27\test.txt','w+')
b.write('%s %s %s' %(filefullname,linecount,charactercount))
b.close()
a.close()
traverse(rootdir,filefullnames)
for filefullname in filefullnames:
linestr(filefullname)
需要注意的地方:
1.使用 os.walk .这个方法返回的是一个三元tupple(dirpath, dirnames, filenames),
其中第一个为起始路径,
第二个为起始路径下的文件夹,
第三个是起始路径下的文件.
dirpath是一个string,代表目录的路径,
dirnames是一个list,包含了dirpath下所有子目录的名字,
filenames是一个list,包含了非目录文件的名字.这些名字不包含路径信息,如果需要得到全路径,需要使用 os.path.join(dirpath, name).
例如:
for i in os.walk(r'c:\Python27\scriptKing'):
print i

打印结果:

('c:\\Python27\\scriptKing', ['123', 'tt'], ['Add_username.py', 'linestr.py', 'linestrfinal.py', 'mm.py', 'printtest.py', 'python\xd6\xd0cursor\xb2\xd9\xd7\xf7\xca\xfd\xbe\xdd\xbf\xe2 .txt', 'sum_num.py', 'traverseDir.py', 'username.txt', 'username_indb.py', '__init__.py', '\xd0\xc2\xbd\xa8\xce\xc4\xb1\xbe\xce\xc4\xb5\xb5.txt'])
('c:\\Python27\\scriptKing\\123', [], [])
('c:\\Python27\\scriptKing\\tt', ['ttt'], ['count_linestr.py', 'hello.txt'])
('c:\\Python27\\scriptKing\\tt\\ttt', [], ['kitty.txt'])
2.os.path.join(parent,filename) 是把几个变量合到一块
 * case1 演示了如何遍历所有目录.
 * case2 演示了如何遍历所有文件.
 * os.path.join(dirname,filename) : 将形如"/a/b/c"和"d.java"变成/a/b/c/d.java".