2017-11-22 18 views
0

내부 파일을 추출 할 수 있지만 전체 체인을 추출합니다.
다음과 같은 파일 구조를파이썬으로 zip 파일에서 내부 파일 압축 풀기

v a.zip 
    v folder1 
     v folder2 
      > inner.txt 

을 가정하고 내가 어떤 폴더 targetinner.txt을 추출 할 가정합니다.
현재이 작업을 수행하려고하면 folder1/folder2/inner.txt에서 target으로 끝납니다. 전체 디렉토리 체인 대신 단일 파일을 추출 할 수 있습니까? 따라서 target이 열리면 내부는 inner.txt입니다.

편집 :
파일을 압축 해제하고 내부 파일 만 원하는 위치로 추출하려면 python zip 모듈을 사용하십시오.

+0

do_art _Python_이 모든 작업과 관련이 있습니까? – CristiFati

답변

2

당신은 수정 (구 v5.52을 가지고) ( ")이 디렉토리를하지 않는 정크 경로 (")를 -j를 사용해야합니다. 여기에 전체 목록이 있습니다 : [die]: unzip(1) - Linux man page, 또는 ($ {PATH_TO} /)을 터미널에서의 압축을 풀면 인수 목록이 출력됩니다.

"unzip" -j "a.zip" -d "target" "folder1/folder2/inner.txt" 

출력 (:

당신이 (당신이 압축 해제 의 경로를 지정해야 할 수도 있습니다) 명령을 사용 "대상"라는 폴더에서 파일을 추출 할 것을 고려 승리하지만 LNX위해입니다 같은 일) :

,321 code.py

, 파이썬을 언급 한 이후,

(py35x64_test) c:\Work\Dev\StackOverflow\q47439536>"unzip" "a.zip" -d "target" "folder1/folder2/inner.txt" 
Archive: a.zip 
    inflating: target/folder1/folder2/inner.txt 

또는 : 0

출력 (-j없이)

,536,
import os 
from zipfile import ZipFile 


def extract_without_folder(arc_name, full_item_name, folder): 
    with ZipFile(arc_name) as zf: 
     file_data = zf.read(full_item_name) 
    with open(os.path.join(folder, os.path.basename(full_item_name)), "wb") as fout: 
     fout.write(file_data) 


if __name__ == "__main__": 
    extract_without_folder("a.zip", "folder1/folder2/inner.txt", "target") 
+0

그래서 정말 추출하지 않습니다. 처음에는 독서를 쓰는 것과 비슷합니다. 아니면 추출하는 것이고 나는 혼란 스럽습니까? : D – AsheKetchum

+1

정확합니다.추출이란 압축 해제를 포함하여 아카이브에서 파일 데이터를 읽은 다음 지정된 파일 이름으로 디스크에 파일 데이터를 쓰는 것을 의미합니다. – CristiFati

+0

설명해 주셔서 감사합니다. :) – AsheKetchum

1

zip에는 파일 시스템에서와 같은 방식으로 폴더 구조가 없습니다. 각 파일의 전체 경로는 이름입니다.

파일 내용 (예 : zipfile.open 또는 zipfile.read)을 읽고, 실제로 사용하려는 파일 이름의 일부를 추출하고 파일 내용을 다음과 같이 저장할 수있는 방법을 사용하고자합니다. 그 파일을 너 자신.