文件备份为zip文件,在此谢谢,limodou

文件备份为zip文件,在此谢谢,limodou

import os
import time
import shutil
import zipfile
import sys

global  today,now,from_path,newdir,to_bkpath,to_ftp,zip_file
filelist = []
today = time.strftime('%Y%m%d')
now = time.strftime('%H%M%S')

newdir  =   ''.join((''.join((today,'-')),now))

def file_exit(file_path):
    if  not os.path.exists(file_path):
        print file_path
        os.makedirs(file_path)  
        print '目录', file_path,'创建成功'

#tmp     =os.getcwd() + os.sep+'filelist.txt'
try:
    f        =        file(os.getcwd() + os.sep+'filelist.txt')
except:
    tf = file(os.getcwd() + os.sep+'filelist.txt', 'w')
    print '初始化listfile.txt'
    tf.write(os.getcwd()+'\n')
    tf.write(os.getcwd()+'\n')
    tf.write(os.getcwd()+'\n')
    tf.close()
    f        =        file(os.getcwd() + os.sep+'filelist.txt')

while        True:
    line = f.readline()
    if len(line) == 0: # Zero length indicates EOF
        break
    filelist.append(line.rstrip('\n\t'))
   
f.close()

def file_zip(from_path,to_path):
    #生成zip文件
    start = from_path.rfind(os.sep)+1
    zip_file = to_path+ os.sep+from_path[start:]+".zip"
    z = zipfile.ZipFile(zip_file,mode="w",compression=zipfile.ZIP_DEFLATED)

    try:
        for dirpath,dirs,files in os.walk(to_bkpath):

            for file in files:
                if file == zip_file or file == "zip.py":
                    continue
                z_path = os.path.join(dirpath,file)
                z.write(z_path,z_path[start:])
                try:
                    os.remove(z_path)
                except:
                    pass
        z.close()
        try:
            os.removedirs(dirpath)
        except:
            pass

    finally:
        if z:
            z.close()


if len(filelist)>3:
    #存在要更新的文件
    from_path = filelist[0].strip('\n')#程序编译目录
    to_ftp = filelist[1].strip('\n')#程序更新目录
    to_bkpath = filelist[2].strip('\n')#备份目录

    if len(from_path)==0:   sys.exit
    if len(to_ftp)==0:      sys.exit
    if len(to_bkpath)==0:   sys.exit
   
    #Initaldir
    file_exit(from_path)
    file_exit(to_ftp)
    file_exit(to_bkpath)

    #备份目录年月日-时分秒
    to_bkpath     =   to_bkpath +   os.sep  +   today
    zip_path     =   to_bkpath
    to_bkpath     =   to_bkpath+ os.sep +newdir

    file_exit(to_bkpath)

    for f in os.listdir(from_path):
        if f in filelist:
            #备份目录
            shutil.copy(from_path+'\\'+f, os.path.join(to_bkpath, f))
            #FTP目录
            shutil.copy(from_path+'\\'+f, os.path.join(to_ftp, f))
            print f
        else:
            print 'no in',f

    file_zip(to_bkpath,zip_path)
else:
    print 'Zero'
楼上的兄弟,我执行程序后报错如下,请指点出错原因.
>>> import zipfile

Traceback (most recent call last):
  File "<pyshell#28>", line 1, in <module>
    import zipfile
  File "C:/Python25\zipfile.py", line 18
SyntaxError: Non-ASCII character '\xc4' in file C:/Python25\zipfile.py on line 18, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details (zipfile.py, line 1
因为源程序中使用了汉字,对于程序中有非ascii码的,在python的第一行应以注释的形式声明文件使用的编码,如:

#coding=utf-8

注意,声明的编码应与文件的实际编码一致。建议使用utf-8,这样比较通用。
收藏.