python简明教程里关于zip的一点解决办法

来源:互联网 发布:tftp 指定端口号 编辑:程序博客网 时间:2024/05/18 01:58

在python简明教程里,有ZIP备份的一个小教程,下载了zip后并在PATH添加bin文件夹的目录,然后在pycharm中运行那段程序,会提示内部外部没有这个命令,个人是这么解决的(我用的Win7):把bin中的把zip.exe放到C:\Windows\SysWOW64中,zip.exe和把bzip2.dll一起拷贝到C:\Windows\System32中,然后在C:\Windows\System32中shift+右键打开命令行,运行zip或者zip.exe,然后就搞定了。回到pycharm中运行,也能打包了,但是这里面还存在一个问题,那就是如果target_dir(即备份目标文件及)中如果包含空格,会提示:“ OSError: [WinError 123] 文件名、目录名或卷标语法不正确” ,如果是单引号包含的话,可以打包,但是会在上一级目录生成一个名字不是全对的zip文件,目前暂时没有解决办法,只能把文件名改一下,之后找到了再回来补。

2017年8月25日15:46:09 补充1:如果想要带空格:

target_dir = '"D:\\py_backup_test\\iu d"'target = target_dir + os.sep + \time.strftime('%Y%m%d%H%M%S') + '.zip'# 如果目标目录还不存在,则进行创建#if not os.path.exists(target_dir): #   os.mkdir(target_dir) # 创建目录

则要注释掉检查目录存在与否并创建那两句,因为os.path.exists通过不了带双引号的路径,要是带单引号就能通过,但是不能创建出正确的zip文件

2017年8月25日16:29:23 补充2:解决带空格的方案:

在文件一开头加上

import re

然后:

# 3. 备份文件将打包压缩成 zip 文件。# 4. zip 压缩文件的文件名由当前日期与时间构成。target = target_dir + os.sep + \time.strftime('%Y%m%d%H%M%S') + '.zip'# 如果目标目录还不存在,则进行创建if not os.path.exists(target_dir):    os.mkdir(target_dir) # 创建目录if re.search(r"\s", target_dir):#判断路径中是否有空格,有的话要用双引号包起来    target_dir_temp_list1 = list(target_dir)#先把字符串转成列表    target_dir_temp_list1.insert(0,"\"")#把列表的第一位加上一个双引号    target_dir_temp_str1 = "".join(target_dir_temp_list1)#转成字符串    target_dir_temp_str2 = target_dir_temp_str1+ os.sep+\    time.strftime('%Y%m%d%H%M%S') + '.zip'#加上时间和后缀名    target_dir_temp_list2 = list(target_dir_temp_str2)#再转成字符串    target_dir_temp_list2.append("\"") #加上最后一个双引号,再转成字符串    target = "".join(target_dir_temp_list2)# 5. 我们使用 zip 命令将文件打包成 zip 格式zip_command = 'zip -r {0} {1}'.format(target,                                ' '.join(source))

2017年8月28日08:40:50 补充3:新的写法:

我觉得那样写的很麻烦,于是在sf提问,我觉得还是基本功不扎实,虽然才学了两三天。

target_dir=target_dir+ os.sep + time.strftime('%Y%m%d%H%M%S') + '.zip'target ='"'+target_dir+'"'

就解决了

原创粉丝点击