# -*- encoding: utf-8 -*-
import os,time
import zipfile
import shutil

#SRCDIRの下の日付時刻名ディレクトリを ZIPDIRの下の同名.zipにする。

#処理するHTMLのあるディレクトリ
SRCDIR = "..\backup"

#ZIPを出力するディレクトリ
DSTDIR = "..\tozip"

#src_dirで指定されたディレクトリ配下のディレクトリ中のファイルを再帰的に圧縮
#zipファイル名
def zipDirectoryDir( src_dir, zip_name ):
    zipf = zipfile.ZipFile(zip_name, 'w', zipfile.ZIP_DEFLATED)

    for  rootname, dirnamelist, filenamelist in os.walk(src_dir): 
        for reg_file in filenamelist:
            write_file = os.path.join( rootname , reg_file)
            arc_name   = write_file
            print( "ZIP圧縮: "+ write_file)
            try:
                zipf.write(write_file, arc_name);
            except:
                print( "ERROR: writing file ="+ write_file)

    zipf.close()

#メイン
files=os.listdir(SRCDIR)
for file in files:
    try:
        dirname = os.path.join(SRCDIR,file)
        zipfilename = os.path.join(DSTDIR,file)+".zip";
        if os.path.isdir(dirname):
            print("ディレクトリなので圧縮 "+dirname)
            zipDirectoryDir( dirname, zipfilename )
            shutil.rmtree(dirname)
    except:
        print( "Error="+file )
        traceback.print_exc()
print( "End" )

うーむ、それらしき大きさのそれらしきzipファイルが作られるのだが、そのZIPはエクスプローラで開くとからっぽ…。
どこかに詰まらないミスがある筈なのだが…。
似た処理の http://qiita.com/suin/items/cdef17e447ceeff6e79d を見ると、

   yeild root

という謎の処理が。これが怪しいがyeildって何だろう?pushっぽい事をするものらしい。ZIPファイルの不正には関係なさそうな気が。
自分の方の、

                arc_name   = write_file
                zipf.write(write_file, arc_name);

がちょっと怪しい気がしてきたな。write_fileってフルパスなんだよな。
→原因はやはり、arc_nameがフルパスだったこと。arc_nameをパス名を含まないものにして解決(サブディレクトリは無い前提)。
展開時にエラーとなる。ちなみに7-Zipならこの状態でも無理矢理解凍できる。