python 检索文件夹

2010-10-22  张东升 

     在网上看到了一段python检索文件的程序,感觉不错,模仿着写了一段,但是发现无法检索带有中文的文件夹。查阅了一些资料后,才知道python(我用的2.6)对中文的支持很麻烦。可是皇天不负有心人,经过一系列的摸索,终于完成了对源程序的改良,现在,它可以检索任何文件夹了。
     程序如下:
     #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类型。
    说起来很拗口,因为我也搞不清楚这些个类型之间的关系,但不管怎样,总算是可以运行了。
420°/4158 人阅读/5 条评论 发表评论

金鑫  2010-10-23

善于总结,学习了


李斐然  2010-10-25

用shell是不是会更简单点?


张东升  2010-10-25

李斐然: 用shell是不是会更简单点?
不会呀


王恩建  2010-10-26

看代码的行数,没发挥出python的特点呢


熊志男  2010-11-24

学习 学些


登录 后发表评论