猫史档案馆


为啥zipfile压缩给绝对目录会把所有路过的文件夹都拉进去?

用户:小邓学编程小邓学编程查看:11 回复:3 评论:11 创建时间:2020-11-25T13:20:58


跪求解决方案

代码

import zipfile
import os

ver = "Alpha 0.1"

while True:
  输入内容 = ""
  path = []
  while 输入内容 != "q!":
    输入内容 = input("请输入文件路径(q!退出):")
    if 输入内容 != "q!":
      path += [输入内容]
  print("请稍后……")
  print("日志:")
  print('创建压缩包...')
  f = zipfile.ZipFile('tpem.zip', 'w' ,zipfile.ZIP_DEFLATED)
  print("完成!")
  for file_name in path:
    print("写入",file_name.split("\\")[-1],"...")
    f.write(file_name)
    print("完成")
  print("正在处理压缩包...")
  f.close()
    


回复

上一页1 页 / 共 1下一页
JSR_白鸾JSR_白鸾

所以,你这个程序的目的是什么?

点赞0


评论


JSR_白鸾JSR_白鸾

for file_name in path:
    print("写入",file_name.split("\\")[-1],"...")
    f.write(file_name)
    print("完成")

我认为应该是这里吧?

你这段的意思是遍历写?

点赞0


评论


小邓学编程小邓学编程

新版(一堆bug):

import zipfile
import os
from tkinter import *
from sys import exit
import tkinter.messagebox as tsk
import codecs

ver = "Alpha 0.1"
main = Tk()
main.title("安装包制作工具 "喵er)

w7 = w5 = w8 = w6 = w9 = w10 = w11 = w12 = w13 =w14 = w15 = None
name = None
path = []

def start():
  global w1
  global w2
  global w3
  global w5
  global w7
  global path
  global main
  global w6
  global w11
  global w10
  global w8
  global w9
  global name
  global w12
  global w13
  global w14
  global w15

  w1.grid_forget()
  w2.grid_forget()
  w3.grid_forget()

  name = w1.get()

  try:
    os.mkdir(name)
  except:
    tsk.showwarning("Error 701","项目创建失败,请检查名称是否含有非法字符(\\、/、:、*、?、\"、<、>)")
    exit()

  w5 = Entry(main)
  w5.grid(row = 0,column = 0)

  w7 = Listbox(main)
  w7.grid(row = 1,column = 0)

  def tj():
    global w5
    global w7
    global path

    w7.insert(END,str(w5.get()))
    path += [str(w5.get())]

  def fz():
    global w6
    global w8
    global w9
    global w5
    global w7
    global w10
    global w11
    global path
    global name
    global w12
    global w13
    global w14
    global w15

    w5.grid_forget()
    w7.grid_forget()
    w6.grid_forget()
    w8.place_forget()
    w9.place_forget()



    for file_path in path:
      print('copy "'+str(file_path)+'" '+str(name)+"\\"+str(str(file_path).split("\\")[-1]))
      if os.system('copy "'+str(file_path)+'" '+str(name)+"\\"+str(str(file_path).split("\\")[-1])) == 0:
          pass
      else:
          Error = "文件"+str(file_path)+"添加错误,请检查文件路径(是否包含后缀名?是否为绝对路径?路径是否存在?\
反斜杠是否使用了一条?)"
          print(Error)
          tsk.showwarning("Error 702",Error)
          exit()

    f = zipfile.ZipFile("Temp.zip","w",zipfile.ZIP_DEFLATED)

    temp = []
    for tmp in path:
        temp += [str(name)+"\\"+str(tmp.split("\\")[-1])]

    for t in temp:
        try:
            f.write(t)
        except:
            tak.showwarning("Error 703","文件添加失败,请重试")

    f.close()

    def 自动写入():
      global main
      global w10
      global w11
      global w12
      global w13
      global w14
      global w15

      w10.grid_forget()
      w11.grid_forget()

      def start():
        global w14
        global w15

        Path = w14.get()
        Main_File = w15.get()

        f = open("Temp.zip","rb")

        code = f.read()

        f.close()

        f = codecs.open("Temp.pyw","wb",encoding='utf-8')

        f.write(r"f = open('Temp.zip','wb')")
        f.write("\n")
        f.write(r"f.write("+str(code)+")")
        f.write("\n")
        f.write("f.close()\n")
        f.write("import zipfile\n")
        f.write("f = zipfile.ZipFile('Temp.zip','r')\n")
        f.write(r"f.extractall('"+Path+"')")
        f.write("\n")
        f.write("f.close()")
        f.write("from os import system as cmd\n")
        f.write("cmd('start '"+Path+")")

        f.close()

        os.system("pyinstaller -F -w Temp.pyw")
        
        exit()

      w12 = Label(main,text = "请输入写入路径:")
      w13 = Label(main,text = "请输入主程序名:")
      w14 = Entry(main)
      w15 = Entry(main)
      w16 = Button(main,text = "开始",command = start)

      w12.grid(row = 0,column = 0)
      w13.grid(row = 1,column = 0)
      w14.grid(row = 0,column = 1)
      w15.grid(row = 1,column = 1)
      w16.grid()
      
    w10 = Label(main,text = "请选择安装属性")
    w11 = Button(main,text = "自动安装(静默安装,自动写入)",command = 自动写入)

    w10.grid()
    w11.grid()

  w6 = Button(main,text = "添加",command = tj)
  w8 = Label(main,text = "请在\n输入\n框中\n输入\n目标\n绝对\n路径")
  w9 = Button(main,text = "完成",command = fz)

  w9.place(relx = 0.805,rely = 0.87)
  w6.grid(row = 0,column = 1)
  w8.place(relx = 0.805,rely = 0.22)

w1 = Entry(main)
w2 = Label(main,text = "请输入项目名称:")
w3 = Button(main,text = "开始",command = start)

w1.grid(row = 0,column = 1)
w2.grid(row = 0,column = 0)
w3.grid(row = 0,column = 2)

main.mainloop()

点赞0


评论