python光盘扫描文件夹与文件列表

发布时间:2020-02-25编辑:脚本学堂
本文分享一例python代码,实现扫描光盘上的文件夹与文件列表,学习下python的os、chardet模块的用法。

本节内容:
python扫描文件夹与文件列表。

例子:
 

复制代码 代码示例:

#!/usr/bin/env python 
# -*- coding:utf-8 -*-
# site: www.jb200.com
#
import os
import chardet
from ConfigParser import RawConfigParser as rcp
def cdWalker(cdrom, cdcfile):
    '''
    光盘扫描主程序
    @param cdrom: 光盘访问路径
    @param cdcfile:输出的光盘信息记录文件(包含路径,绝对,相对都可以)
    @return: 无, 直接输出成*.cdc文件
    @attention: 从V0.7开始不使用此扫描函数,使用IniCDinfo()
    '''
    export = ""
    for root, dirs, files in os.walk(cdrom):
        #print formatCDinfo(root, dirs, files)
        export += formatCDinfo(root, dirs, files)
    open(cdcfile, 'w').write(export)

#格式化文件信息输出
def formatCDinfo(root, dirs, files):
    '''
    光盘信息记录格式化函数
    @note: 直接使用os.walk()函数的输出信息进行重组
    @param root: 当前根
    @param dirs:当前根中的所有目录
    @param files: 当前根中的所有文件
    @return: 字串,组织好的当前目录信息
    '''
    export = "n" + root + "n"
    for d in dirs:
        export += "-d" + root + _smartcode(d) + "n"
    for f in files:
        export += "-f %s %s n" % (root, _smartcode(f))
    export += "="*70
    return export

def iniCDinifo(cdrom, cdcfile):
    '''
    光盘信息.ini格式化函数
    @note: 直接利用os.walk()函数的输出信息由ConfigParser.RawConfigParser
           进行重组处理或.ini格式文件输出并记录
    @param cdrom: 光盘访问路径
    @param cdcfile; 输出的光盘信息记录文件(包含路径, 绝对,相对都可以)
    @return: 无, 直接输出成组织好的类.ini的*.cdc文件
    '''
    walker = {}
    for root, dirs, files in os.walk(cdrom):
        walker[root] = (dirs, files)
    cfg = rcp()
    cfg.add_section("Info")
    cfg.add_section("Comment")
    cfg.set("Info", "ImagePath", cdrom)
    cfg.set("Info", "Volume", cdcfile)

    dirs = walker.keys()
    i = 0
    for d in dirs:
        i += 1
        cfg.set("Comment", str(i), d)

    for p in walker:
        cfg.add_section(p)
        for f in walker[p][1]:
            cfg.set(p, f, os.stat("%s/%s" % (p, f)).st_size)
    f = open(cdcfile, 'w')
    cfg.write(f)
    f.close()

def _smartcode(stream):
    '''
    智能能匹配编码
    @param stream: 需要匹配的字符串
    @return: 相应编码后的字符串
    '''
    ustring = stream
    codedetect = chardet.detect(ustring)["encoding"]
    #print codedetect
    try:
        #print ustring
        ustring = unicode(ustring, codedetect)
        #print ustring
        return "%s %s " % ("", ustring.encode('gb2312'))
        #return "%s %s " % ("", ustring.encode('utf8'))
    except:
        return u"bad unicode encode try!"

if __name__ =='__main__':
    cdrom = "F:/www"
    cdcfile = "F:/www/jbxue.cdc"
    cdWalker(cdrom, cdcfile)
    #iniCDinifo(cdrom, cdcfile)