本节内容:
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)