2017-12-19 21 views
0

안녕하세요, 12 개의 파일이있는 디렉토리가 있습니다. 각각 3 개의 파일이 포함 된 4 개의 개별 zip 파일을 만들고 싶습니다. 문제는 파일 이름을 기반으로 zip 파일의 이름을 동적으로 지정하고 싶습니다. (각 우편 번호는 모두 3에서 시작합니다.)Python에서 동적 이름으로 파일 압축하기

예.

IT-12123.txt 
IT-12123.pdf 
IT-12123.xls 

IT-23232.txt 
IT-23232.pdf 
IT-23232.xls 

또한 (그 우편에서 해당 파일을 모두 포함) IT-12123.zip라는 우편

(그 우편에서 해당 파일을 모두 포함) IT-23232.zip를 만들 싶습니다 감사합니다.

+2

코드를 공유해주십시오. 동적 이름이 아닌 파일을 압축 할 수 있습니까? 아니면 다른 사람이 해당 코드를 작성할 수있게 하시겠습니까? – DevB2F

+0

[SO]에 오신 것을 환영합니다! Stack Overflow는 질의 응답 사이트입니다. [SO]에서 자신과 같은 독자는 다른 독자가 그 질문에 답하려고하는 동안 질문을합니다. 귀하의 게시물은 많은 좋은 정보를 가지고 있지만 필수적인 요소가 하나 빠져 있습니다 : 질문! 정확히 무엇을 묻고 있습니까? (덧붙여서 잠시 시간을 내면 [둘러보기]를 방문하여 [질문]을 읽어보십시오.) –

+0

보기 : https://stackoverflow.com/questions/678236/how-to-get-the-filename- nileirect = 1 & lq = 1 –

답변

0

파일이 모두 같은 폴더에 있으면 간단한 해결책이 있습니다.

import itertools 
import glob 
import os 
import zipfile 
# move to the directory where the files are located 
os.chdir("/mydir") 
# find all files starting with IT 
files = glob.glob('IT*') 
files_no_ext = [] 
for file in files: 
    # remove extension from files names 
    files_no_ext.append(os.path.splitext(file)[0]) 
# group no extension files by name 
grouped_files= itertools.groupby(files_no_ext) 
for name, group in grouped_files: 
    zipped = zipfile.ZipFile(name+'.zip', 'w') 
    to_zip = glob.glob(name+'*') 
    for file in to_zip: 
     zipped.write(file) 
    zipped.close()