vendredi 28 janvier 2011

#!/usr/bin/env python
# -*- coding: utf-8

import sys
import os
import os.path
from zipfile import ZipFile
import shutil

def process_file(root, filename):
    try:
        zf = ZipFile(filename)
    except:
        print "E %s" % f.decode('utf-8')
    for fileinfo in zf.infolist():
        try:
            fn = unicode(fileinfo.filename, 'cp866')
        except:
            fn = unicode(fileinfo.filename)
            outputfile = open(os.path.join(root,
                                           fn.encode('utf-8')), "wb")
            shutil.copyfileobj(zf.open(fileinfo.filename),
                               outputfile)
            outputfile.close()
    os.remove(filename)
            

if __name__ == '__main__':
    for root, dirs, files in os.walk(sys.argv[1]):
        for f in files:
            filename = os.path.join(root, f)
            basename, extension = os.path.splitext(filename)
            if extension.lower() == '.zip':
                process_file(filename)

Кривые-кривые имена файлов после find . -iname '*.zip' -execdir unzip {} \; и рассказали мне, что некоторые люди умудряются в 21 веке засунуть в архив файлы с именами в кодировке cp866. Впрочем, это ж акадэмики.

Aucun commentaire:

Enregistrer un commentaire