๊ฐœ๋ฐœ๐Ÿ’ป/Python

[Python] ZipํŒŒ์ผ ์••์ถ• ํ•ด์ œ(2)(๋น„๋ฐ€๋ฒˆํ˜ธ ํฌํ•จ)

ๅฃ“ๅ€’ 2022. 10. 4. 22:43

2022.09.17 - [๊ฐœ๋ฐœ๐Ÿ’ป/Python] - [Python] ZipํŒŒ์ผ ์••์ถ• ํ•ด์ œ(๋น„๋ฐ€๋ฒˆํ˜ธ ํฌํ•จ)

 

[Python] ZipํŒŒ์ผ ์••์ถ• ํ•ด์ œ(๋น„๋ฐ€๋ฒˆํ˜ธ ํฌํ•จ)

Python ๋ชจ๋“ˆ์ธ zipfile๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•˜๊ฒŒ Zip ํŒŒ์ผ ์••์ถ•ํ•ด์ œ ์ฝ”๋“œ๋ฅผ ์™„์„ฑํ•˜์˜€๋‹ค. Import ๋””๋ ‰ํ† ๋ฆฌ ๋ฐ ํŒŒ์ผ๋ช… ํƒ์ƒ‰์„ ์œ„ํ•ด os, ์••์ถ• Zip ํŒŒ์ผ์„ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด zipfile, ์ •ํ™•ํ•œ ์˜ค๋ฅ˜ ์œ„์น˜ ๋ฐ ์›์ธ ํŒŒ์•…์„

bymalware.tistory.com

๊ธฐ์กด Zip ํŒŒ์ผ ์••์ถ•ํ•ด์ œ ์ฝ”๋“œ๋ฅผ ๋ธ”๋กœ๊ทธ์— ๊ธฐ๋กํ•ด๋‘์—ˆ์œผ๋‚˜ ํ˜„์žฌ ์ฝ”๋“œ๊ฐ€ ์ •์ƒ์ ์œผ๋กœ ์ž‘๋™๋˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋„ ์กด์žฌํ•˜์—ฌ ํ›„์† ๊ธ€์„ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.


Error

๊ธฐ์กด ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•˜์˜€์„ ๋•Œ "That compression method is not supported" ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์กด์žฌํ•œ๋‹ค.

 

ํ•ด๋‹น ์˜ค๋ฅ˜์˜ ์›์ธ์€ zipfile ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์•”ํ˜ธ๋กœ ๋ณดํ˜ธ๋œ zip ์—์„œ ์ž‘๋™ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์•”ํ˜ธ๋ฅผ ์„ค์ •ํ•  ๋•Œ "Zip ๋ ˆ๊ฑฐ์‹œ ์•”ํ˜ธํ™”" ์˜ต์…˜์„ ์„ ํƒํ•ด์•ผ ํ•˜์ง€๋งŒ ์ด๋ฅผ ์„ ํƒํ•˜์ง€ ์•Š์•„ ๋ฐœ์ƒํ•œ ์˜ค๋ฅ˜๋กœ ์ถ”์ธกํ•˜๊ณ  ์žˆ๋‹ค.

https://stackoverflow.com/questions/62738917/python-zipfile-compression-method-is-not-supported

 

Python Zipfile compression method is not supported

The times when this worked were when I used ZIPCrypto compression. It's with AES-256 that it fails. How to get around this please? I previously had success using the following Python code to open a

stackoverflow.com

 

์ด๋Ÿฌํ•œ ์˜ค๋ฅ˜๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ pyzipper๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ์ƒˆ๋กœ์šด ์ฝ”๋“œ๋ฅผ ๊ตฌ์ถ•ํ•˜์˜€๋‹ค.

 

Pyzipper - Install

pyzipper ์„ค์น˜๋Š” ํ„ฐ๋ฏธ๋„์— ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋ช…๋ น์–ด๋กœ ์‰ฝ๊ฒŒ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

pip install pyzipper

 

Pyzipper ๊ตฌํ˜„

1๊ฐœ์˜ ํŒŒ์ผ์— ๋Œ€ํ•ด ์••์ถ•์„ ํ’€๊ณ  API๋กœ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋”ฉํ•˜์˜€๋‹ค.

์••์ถ•ํ•ด์ œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ง€์ •ํ•œ ํ›„ with ~ as ๊ตฌ๋ฌธ์œผ๋กœ ์••์ถ•ํ•ด์ œ ๋Œ€์ƒ ํŒŒ์ผ์„ ์—ด์–ด์ค€ ํ›„ extractall()ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹ค์งˆ์ ์ธ ์••์ถ•ํ•ด์ œ ๊ณผ์ •์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

import pyzipper

def unzip_fun(filename):
    password = '๋น„๋ฐ€๋ฒˆํ˜ธ'
    with pyzipper.AESZipFile(filename, 'r', compression =pyzipper.ZIP_DEFLATED, encryption = pyzipper.WZ_AES) as extracted_zip:
        extracted_zip.extractall(path ='์••์ถ•ํ•ด์ œ๋œ ํŒŒ์ผ๋“ค์ด ์†ํ•  ๋””๋ ‰ํ† ๋ฆฌ ๊ฒฝ๋กœ', pwd=str.encode(password))

 

์œ„์˜ ์ฝ”๋“œ๋Š” 1๊ฐœ์˜ ํŒŒ์ผ์— ๋Œ€ํ•ด์„œ๋งŒ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— for ๋ฌธ์„ ํ†ตํ•ด ๋ชจ๋“  zip ํŒŒ์ผ์„ ์ธ์ž๋กœ ๋„˜๊ฒจ ๋ชจ๋“  ํŒŒ์ผ์˜ ์••์ถ• ํ•ด์ œ๋ฅผ ์ •์ƒ์ ์œผ๋กœ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค.

    basic_dir = '์••์ถ•ํ•ด์ œ ๋Œ€์ƒ์ด ์กด์žฌํ•˜๋Š” ํŒŒ์ผ'

    file_list = os.listdir(basic_dir)
    file_name = []
    for i in range(len(file_list)):
        try:
            file_name.append(basic_dir + str(file_list[i]))
            unzip.unzip_fun(file_name[i])
        except:
            print(str(file_name[i])+ 'ํ•ด์ œ ์‹คํŒจ')

 

์ „์ฒด ์†Œ์Šค์ฝ”๋“œ

์ „์ฒด ์†Œ์Šค์ฝ”๋“œ๋Š” ๊นƒํ—ˆ๋ธŒ์— ์กด์žฌํ•œ๋‹ค.

 

์˜ค๋ฅ˜, ์ž˜๋ชป๋œ ์  ๋˜๋Š” ๊ถ๊ธˆํ•œ ์ ์ด ์žˆ์œผ์‹œ๋‹ค๋ฉด ๋Œ“๊ธ€ ๋‚จ๊ฒจ์ฃผ์„ธ์š”โ—