2016-09-10 7 views
0

私はpythonに新しくなりました。 "diveintomark-diveintopython3-793871b"ディレクトリのzipファイルを作成しようとしています。os.chdir()関数を使用して現在の作業ディレクトリを変更しました。 zipファイルが作成されますが、問題は、私は、zipファイルを解凍するとき、私は次のディレクトリにzipファイルの作成中にネストされたディレクトリが表示される

Users/laiba/Desktop/diveintomark-diveintopython3-793871b 

を取得するが、私は唯一の私のzipフォルダないに作成全体のネストされたディレクトリ内diveintomark-diveintopython3-793871bフォルダをしたいです。なぜこれが起こっていて、どうすればこの問題を解決できますか?

import zipfile, os 

os.chdir('c:\\Users\\laiba\\Desktop') 
myzip=zipfile.ZipFile('diveZip.zip','w',zipfile.ZIP_DEFLATED) 

for folder,subfolder,file in os.walk('diveintomark-diveintopython3-793871b'): 
    myzip.write(folder) 
    for each in subfolder: 
     myzip.write(os.path.abspath(os.path.join(folder,each))) 
    for each in file: 
     myzip.write(os.path.abspath(os.path.join(folder,each))) 
+1

'os.path.abspath'を使用しないことがありますか? –

答えて

1

引数arcname:フルパス名ではなく、アーカイブ内の項目の名前を使用できます。しかし、ここではあなたがすでに正しいディレクトリにいるので、あなたはそれを必要としません。ただ、

import zipfile, os 

os.chdir('c:\\Users\\laiba\\Desktop') 

myzip=zipfile.ZipFile('diveZip.zip','w',zipfile.ZIP_DEFLATED) 

for folder,subfolder,file in os.walk('diveintomark-diveintopython3-793871b'): 
    for each in subfolder+file: 
     myzip.write(os.path.join(folder,each)) 
myzip.close() 

これは、ディレクトリを変更せずに行うことが可能ですabspathをドロップすると、あなたは(重複フォルダエントリをしても)行われているが、あなたはchdirしている必要はありませんので、よりエレガントにも、より複雑な

import zipfile, os 

root_dir = r"c:\Users\laiba\Desktop" 
myzip=zipfile.ZipFile(os.path.join(root_dir,'diveZip.zip'),'w',zipfile.ZIP_DEFLATED) 

for folder,subfolder,file in os.walk(os.path.join(root_dir,'diveintomark-diveintopython3-793871b')): 
    for each in subfolder+file: 
     source = os.path.join(folder,each) 
     # remove the absolute path to compose arcname 
     # also handles the remaining leading path separator with lstrip 
     arcname = source[len(root_dir):].lstrip(os.sep) 
     # write the file under a different name in the archive 
     myzip.write(source,arcname=arcname) 

myzip.close() 
+0

それは働いて、ありがとう、しかし私はこの警告メッセージを得ている:UserWarning:重複する名前: 'diveintomark-diveintopython3-793871b/util /' myzip.write(フォルダ)それはどういう意味ですか? –

+0

私のコードに従ってください:元のコードでは 'myzip.write(folder)'と書いてありますが、 'os.walk'によってすでに処理されています(確かではありませんが、 –

関連する問題