程序如下:
Code:
#coding:utf-8 #Filename:dir.py import os class dir(object): def __init__(self): self.count=0 self.space="" self.list=[] def p(self,url): if type(url).__name__!="unicode": url=unicode(url,"utf-8") else: pass files=os.listdir(url) for file in files: myfile=url+"\\"+file print myfile size=os.path.getsize(myfile) if os.path.isfile(myfile): string=self.space+"|____"+file+str(size)+"\n" string=string.encode("utf-8") self.list.append(string) if os.path.isdir(myfile): string=self.space+"|____"+file+"\n" string=string.encode("utf-8") self.list.append(string) self.space=self.space+"|" self.p(myfile) self.space=self.space[:-5] return self.list def writeList(self,url): f=open(url,'w') f.writelines(self.list) print "ok" f.close() if __name__=="__main__": d=dir() d.p("D:\\张东升\\测试用例管理系统") d.writeList("d:/python.txt") |
在使用os.listdir(url)时,传入的参数如果有中文汉字,就无法正常使用,原因在于,有汉字时,print type(url) ,这时,可以发现,是<type 'str'>,而listdir()需要传入的参数类型应该是 <type 'unicode'>,所以,在p(self,url)的最开始,先进行一次转化。转化时,先判断传入的参数是不是<type 'unicode'>,如果不是,才转化,否则会出错。
另外f.writelines(self.list)时,list列表中的元素必须是str类型的,但是经过 string=self.space+"|____"+file+str(size)+"\n"后,string的编码类型为unicode,原因在于file的编码类型是unicode,其他三个会在执行+操作时自动转换,所以需要在转化为str类型。
说起来很拗口,因为我也搞不清楚这些个类型之间的关系,但不管怎样,总算是可以运行了。
from:http://www.testwo.com/space-1824-do-blog-id-3267.html
=============================
其实os.listdir(path),path只接受str和unicode,如果是unicode,则返回unicode的list;如果是str的则返回str的list(这里面可能会有不同的编码,这取决于这个path下是否有不同编码的文件或目录名。换句话说就是返回跟文件名一样的编码的str。)