개인적 보관 - 폴더 합치기 파이썬. > 사용기

본문 바로가기
  • 회원로그인

    아이디 비밀번호
  • 접속자 54
사이트 내 전체검색

사용기

개인적 보관 - 폴더 합치기 파이썬.

페이지 정보

본문

# -*- coding: utf-8 -*-

import os

import glob

import shutil

import subprocess


#import re

#import tkinter

#from tkinter import filedialog


import wx

import wx.lib.agw.multidirdialog as MDD



#dir_qty = 74 # 총 대상인 디렉토리

start_file = 2 # 표지 파일 갯수

book_split = 2 # 폴더 몇개가 하나의 북인지 수량

#i=j=k=1

book_file_qty = 0 




def move_file (src_file_name, dst_file_name):

#    print("move '"+src_file_name+"'  '"+dst_file_name+"'")   

    shutil.copyfile(src_file_name,dst_file_name)



def processing_files(files_list,src_folder,dst_folder,book_file_qty,dir_qty):

    file_qty=0

    real_file_no = book_file_qty

    

    for file in files_list:

        if (book_file_qty == 0 or file_qty >= start_file):

            dst_file = dst_folder+"/"+str(real_file_no+1).zfill(3)+".jpg"

            move_file(src_folder+"/"+file,dst_file)

            real_file_no = real_file_no + 1

        file_qty=file_qty+1

    print (src_folder.split("/")[-2]+" : ",src_folder.split("/")[-1],

           "(T-"+str(dir_qty-int(src_folder.split("/")[-1]))+")",file_qty,book_file_qty)

    return real_file_no



def get_files_count(folder_path):

# dirListing = os.listdir(folder_path)

dirListing = glob.glob(folder_path+'/???')

return len(dirListing)


def createFolder(directory):

    try:

        if not os.path.exists(directory):

            os.makedirs(directory)

    except OSError:

        print ('Error: Creating directory. ' +  directory)


def select_dir():

    # Our normal wxApp-derived class, as usual

    app = wx.App(0)

    dlg = MDD.MultiDirDialog(None, title="Custom MultiDirDialog", defaultPath="C:/Users/Jchung/Desktop/Working/묵검향",

                            agwStyle=MDD.DD_MULTIPLE|MDD.DD_DIR_MUST_EXIST)


    if dlg.ShowModal() != wx.ID_OK:

        print ("********************")

        print ("선택을 취소했습니다.")

        print ("********************")

        dlg.Destroy()

        return 


    paths = dlg.GetPaths()


    dlg.Destroy()

    app.MainLoop()

    return paths

    

    

def main_processing(target_dir,book_split,start_file,book_file_qty):


    i=j=1

    dir_qty = get_files_count(target_dir)

    folder_name = "/"+target_dir.split("/")[-1]+"/"

    print (target_dir.split("/")[-1])

    print ("------------------------------------------")

    print ("폴더 개수: "+str(dir_qty))


    new_dst_folrder = target_dir+folder_name

    

    createFolder(new_dst_folrder)

    

    while i <= dir_qty:

        target_dir_name = target_dir+"/"+str(i).zfill(3)

        file_list=os.listdir(target_dir_name)

#        abcd = divmod(i, book_split)[1]


        if divmod(i, book_split)[1] == 0: # 책의 시작

            new_dst_folrder = target_dir+folder_name+str(j).zfill(3)

            #new_dst_folrder = target_dir+"/complete/"+str(j).zfill(3)

            # total_file_qty = get_files_count(target_dir+"/complete/"+str(k).zfill(3))

            #book_file_qty = processing_files(file_list,target_dir_name,new_dst_folrder,book_file_qty-start_file)

            book_file_qty = processing_files(file_list,target_dir_name,new_dst_folrder,book_file_qty,dir_qty)

            book_file_qty = 0

            j = j+1

            

            

        else : # 나머지 북 (폴더/book_split가 0이 아닌 경우)

            new_dst_folrder = target_dir+folder_name+str(j).zfill(3)  

            #new_dst_folrder = target_dir+"/complete/"+str(j).zfill(3)  

            #dst_folder_qty = get_files_count(new_dst_folrder)

            createFolder(new_dst_folrder)

            book_file_qty = processing_files(file_list,target_dir_name,new_dst_folrder,book_file_qty,dir_qty)

 #           k=j

            

        i=i+1

        

    archive_name = target_dir+"/../"+target_dir.split("/")[-1]+".zip"

    archive_target = target_dir + folder_name

    

#    run_command = "C://Program Files//Bandizip//Bandizip.exe"

    run_command = "C://Program Files//7-Zip//7z.exe"

    print (folder_name.split("/")[1]+" 압축중.....")


#    subprocess.run([run_command,"a", "-y", archive_name, archive_target], stdout=True)


    result = subprocess.run([run_command,"a", "-tzip", archive_name, archive_target], stdout=subprocess.PIPE)

    result_out = result.stdout

#    print (result_out.decode(encoding='UTF-8', errors='ignore'))

    print (str(result_out, 'cp949'))

    print ()

    print (archive_name+"  Comleting....")

#   shutil.move(archive_name, target_dir+"/../")    

  



if __name__ == "__main__":



    

#    root = tkinter.Tk()

#    root.withdraw()

#    target_dir=filedialog.askdirectory(parent=root,initialdir="C:/Users/Jchung/Desktop/Working/묵검향",title='Please select a directory')

#    main_processing(target_dir,book_split,start_file,book_file_qty)


    target_dirs = select_dir()

 

    if target_dirs is not None:

        

        print ("처리할 폴더 개수: ",len(target_dirs))

        print ("------------------------------------------") 

        for path in enumerate(target_dirs):

            target_dir = path[1].replace('\','/')

            print(target_dir)

            main_processing(target_dir,book_split,start_file,book_file_qty)


   

    print(" 완료!!!!")

  

댓글목록

등록된 댓글이 없습니다.


Copyright © 소유하신 도메인. All rights reserved.