2017-04-04 7 views
0

나는 메모리에 io.BytesIO 버퍼로 저장되어있는 zip 파일을 가지고 있습니다. zip 파일 내에서 디렉토리 중 하나에 대한 심볼릭 링크를 만들어야합니다.파이썬에서 zipfile로 심볼릭 링크를 만드는 방법

다음은 (지금부터이 similar question에서) 시도한 것이지만 최상위 수준에서 원하는대로 링크를 작성하지 않습니다.

링크로 만들 수 : 루트/스케일/lib 디렉토리/하이퍼 바이저/평방/pika_3_5

링크 이름 : '새앙 토끼'

링크 위치 : 최상위 레벨에서

ZipFile를 기존 : 데이터 [ 'egg_buffer']

with zipfile.ZipFile(data['egg_buffer'], 'a') as zip_buffer: 
    dest = 'root/scale/lib/hypervisor/kvm/pika_3_5' 
    info = zipfile.ZipInfo('pika') 
    info.external_attr |= 0120000 << 16L # symlink file type 
    info.compress_type = zipfile.ZIP_STORED 
    zip_buffer.writestr(info, dest) 
data['egg_buffer'].seek(os.SEEK_SET) 

는 사실이 '새앙 토끼의 이름으로 루트 레벨에서 파일을 생성되지만이 심볼릭 링크하지 않고 같은 내용이 텍스트 루트/스케일/lib 디렉토리/하이퍼 바이저/esx65/pika_3_5 대신.

+0

Windows에서 추출하려고합니까? Unix 심볼릭 링크는 윈도우에서 작동하지 않으며, 대상과 함께 파일로 표시됩니다. – mata

답변

1

당신은 소스 파일 됨 src이며, DST는 심볼릭 링크 파일입니다

import os; os.symlink(src, dst) 

로 심볼릭 링크를 만들 os 모듈을 사용할 수 있습니다.

+0

그러면 (메모리의) zip 파일이 아닌 디스크에 심볼릭 링크가 생성됩니다. – ViFI