2012-11-19 4 views
0

시작하기 전에 target_dir의 스냅 샷을 찍은 zip 스크립트를 작성하고 압축하여 임시 폴더에 저장하고 "now"변수의 파일 이름을 지정합니다. .변수를 파이썬 zip 스크립트에 빌드

zip = zipfile.ZipFile('/tmp/example.zip', 'w', zipfile.ZIP_DEFLATED) 

:

#!/usr/bin/env python 

import os 
import sys 
import datetime 

now = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M") 
target_dir = '/var/lib/data' 
temp_dir='/tmp' 

zip = zipfile.ZipFile('/tmp/example.zip', 'w', zipfile.ZIP_DEFLATED) 
rootlen = len(target_dir) + 1 
for base, dirs, files in os.walk(target_dir): 
    for file in files: 
     fn = os.path.join(base, file) 
     zip.write(fn, fn[rootlen:]) 

내가이 줄을 대신 대상을 하드 코딩의 "지금"변수 "TEMP_DIR"를 대신 사용하는 얻을 방법을 알아낼 수 없습니다 : 이것은 내가 가지고있는 코드입니다 나는 이와 같은 것을 원한다고 생각한다. (의사 코드)

zip = zipfile.ZipFile('<temp_dir>/<now>.zip', 'w', zipfile.ZIP_DEFLATED) 

누구에게 어떻게해야 하는가?

답변

1

파이썬 문자열 형식화하는 당신이

zip = zipfile.ZipFile('%s/%s.zip' % (temp_dir, now), 'w', zipfile.ZIP_DEFLATED) 

문자열 형식화하는이 형식화하는 연산자 % 후 튜플의 문자열 "% s 님"의 발행 수를 대체 될 문자열에 변수의 내용을 넣을 수 있습니다.

또는 (및 청소기), 당신이 나중에 코드에서 사용하는 것과 동일한 os.path.join를 사용

zip = zipfile.ZipFile(os.path.join(temp_dir, now+".zip"), 'w', zipfile.ZIP_DEFLATED) 

os.path.join은 어떤 논리에 따라 함께 파일 시스템 경로의 요소를 접착제 기능입니다 당신의 파일 시스템이 사용되므로 경로에서 해당 문자를 사용하는 운영 체제에서는 / 대신 \을 사용합니다. 문자열 연결은 단지 +이므로, .zip으로 끝나는 파일을 다른 문자열 now에 붙이려면 now+".zip"이 트릭을 수행합니다.

+0

좋아요? https://gist.github.com/4114519 – Jimmy

+0

좋아, 편집 한 후 이제 다음과 같이 처리 할 수 ​​있습니다. https://gist.github.com/4114519 – Jimmy

+0

제대로 작동하는 것처럼 보입니다. – Anaphory

2

간단히 말해서, os.path.join(temp_dir, now + '.zip')입니다.하지만 실제로 그게 당신이 요구하는 것이 확실하지 않습니다. 왜냐하면 당신이 여기까지 붙어서 어떻게 붙잡 혔을 지 모르기 때문입니다.

+0

을, 나는 그것이 작동하기 위해 노력하고 내 신청. – Jimmy

+0

나는 코드를 구현하려고 시도했다. 제대로했는지 만 알 수 있을까? https://gist.github.com/4114493 – Jimmy

+0

아니요, 함수 호출을 둘러싼 인용 부호가 있습니다. – Anaphory

0

또한 shutil 내에서 높은 수준의 기능을 사용할 수 있습니다 : 나는 그래서이 대부분을 주장 어차피 다른 사람의 예제 코드에 구축을 위해 노력하고있다

>>> import shutil 
>>> from time import strftime 
>>> now = strftime("%Y-%m-%d_%H-%M") 
>>> shutil.make_archive('/tmp/file_%s' % now, 'zip', '/usr/games/') 
'/tmp/file_2012-11-19_22-43.zip' 
관련 문제