回答編集履歴
1
質問を受けて追記
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
|
+
|