2017-10-25 16 views
2

私は全体のstackoverflowを検索して、zipファイルパスからサブフォルダの名前だけを抽出する方法を知りました。zipファイルのフォルダ名を取得する - Python

私はジッパーパスを取得するのTkinterを使ってみました:

Import os 
from tkinter import filedialog 
import tkinter as tk 
from zipfile import ZipFile 

root = tk.Tk() 
root.withdraw() 
root.filename = filedialog.askopenfilename(initialdir=os.getcwd(), title="Select file", filetypes=[("zip", "*.zip")]) 

を、うまくいけば、すべてのサブフォルダの名前を取得するためにZIPファイルと名前リストを使用していました。

['CS10/', 'CS10/.DS_Store', '__MACOSX/', '__MACOSX/CS10/', '__MACOSX/CS10/._.DS_Store', etc........ 

は、私はちょうどこのケースCS10などにあるフォルダ名を取得する方法があるかどうかを知りたい:

with ZipFile(root.filename, 'r') as f: 
    names = f.namelist() 

はしかし、私はそれを取得します。

例: 私は名前の3つのフォルダがある場合: (ユーザ/ Kiona/fruits.zip)ZIPファイルのパスに "Appleは" "オレンジ" "梨" を私は[ 'アップル' を印刷する、 'オレンジ' 、 'Pear']

私は非常にPythonで新しいので、これは非常にばかげた問題のように聞こえないことを願っています。

乾杯!

+1

https://docs.python.org/3.6/library/zipfile.html#zipfile.ZipInfo.is_dirを見て、参考のため

with ZipFile(root.filename, 'r') as f: names = [info.filename for info in f.infolist() if info.is_dir()] 

'/'最初の文字列だけを取ります(複数の文字列が存在する限り)。 '__MACOSX'ディレクトリを除外するには、結果から除外する名前のリストと、結果に含まれていないことを確認するためのチェックを定義するだけです。 –

+0

私は少しあなたの質問で混乱しています。 zipファイルは任意の数のディレクトリとファイルを含むことができ、その中に任意のレイアウトを持つことができます。 'namelist()'は、すべてのディレクトリとそれに含まれるファイルのアーカイブ内のフルパスを返します。どのフォルダ名を決定しようとしていますか、どのような基準でですか? – Iguananaut

+0

ありがとう@Paulルーニー、私はすべてのプラットフォームとすべての種類のフォルダが私のコードのために使用できるようにしたい、私はちょうど "/"で終わるものを保持しようとしていた、 "__"が含まれていないが別のプラットフォーム(Windowsなど)を使用するかどうかわかりません。必要なものがいくつか削除されます。 – Flora

答えて

関連する問題