回答編集履歴

1

質問を受けて追記

2022/05/28 08:52

投稿

TakaiY
TakaiY

スコア12781

test CHANGED
@@ -1,4 +1,31 @@
1
1
  zipfile.ZipFileクラスのopen() メソッドを使うと、中に入っているファイルにアクセスすることができます。 これがzipファイルであった場合、それをさらにzipfile.ZipFile で開けばいいことになります。
2
2
  その中にさらにzipがあったら...という場合は、再帰的に適用するようにすればいいでしょうね。
3
3
 
4
+ ---
4
5
 
6
+ コードつきの回答も出ていますから、こちらからも例を出しましょう。
7
+
8
+ 「それがzipの中のzipに使おとしたら、notfoundになりました。」のそれが何を指しているかわからないのですが、
9
+ zipf.open(<zipファイル内のファイル名>) とすれば、そのファイルのハンドラが取得できますので、それをさらにzipfile.ZipFile()で開けばいいのです。
10
+ (BytesIOを経由しなくても開けます)
11
+ 以下は、zipファイルの中にさらにzipファイルが入っていても再帰的に表示するようにしたものです。
12
+
13
+ ```python
14
+ import zipfile
15
+ import pathlib
16
+
17
+ def print_zipfile_namelist(infile, prefix=''):
18
+
19
+ zipf = zipfile.ZipFile(infile)
20
+
21
+ for fname in zipf.namelist():
22
+ fpath = pathlib.Path(fname)
23
+ if fpath.suffix == '.zip':
24
+ print_zipfile_namelist(zipf.open(str(fpath)), prefix=f'{prefix}{fpath.name}:')
25
+ else:
26
+ print(f'{prefix}{fpath}')
27
+
28
+ print_zipfile_namelist('A_Folder.zip')
29
+ ```
30
+
31
+