回答編集履歴
1
別の手法も追加
answer
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
元の形を保ちたいのであれば
|
2
2
|
|
3
3
|
```python
|
4
|
+
import os
|
4
5
|
with zipfile.ZipFile('./archive.zip', 'w') as myZip:
|
5
6
|
des_folder = './'
|
6
7
|
for folder, subfolders, files in os.walk(des_folder):
|
@@ -12,4 +13,27 @@
|
|
12
13
|
break
|
13
14
|
|
14
15
|
```
|
15
|
-
ループを1回目だけ実行して、すぐに抜けるという変則的なコードです。
|
16
|
+
ループを1回目だけ実行して、すぐに抜けるという変則的なコードです。
|
17
|
+
上記のコードは三番目に考えたコードで、その前のコードは以下です。
|
18
|
+
```python
|
19
|
+
import os
|
20
|
+
with zipfile.ZipFile('archive.zip', 'w') as myZip:
|
21
|
+
for file in os.walk('./').__next__()[2]:
|
22
|
+
if file != 'archive.zip':
|
23
|
+
myZip.write(file)
|
24
|
+
os.remove(file)
|
25
|
+
```
|
26
|
+
os.walk('./')はジェネレータですので、それを__next__()で呼び出すと長さが3のリストが帰ってきます。その最後の要素には、現在のディレクトリにあるサブディレクトリではないファイルが格納されています。ただ、ジェネレータの__next__メソッドを使うのは一般的ではないので上記のコードにしました。
|
27
|
+
|
28
|
+
一番最初に思いついたコード下のコードです。これははotnさんも書かれていた方法です。
|
29
|
+
```python
|
30
|
+
import os
|
31
|
+
import glob
|
32
|
+
with zipfile.ZipFile('archive.zip', 'w') as myZip:
|
33
|
+
for file in glob.glob("*"):
|
34
|
+
if os.path.isfile(file) and file != 'archive.zip':
|
35
|
+
myZip.write(file)
|
36
|
+
os.remove(file)
|
37
|
+
```
|
38
|
+
しかし、質問のタイトルに、「os.walk()で」とあったので、os.walkを使う答えを考えました。
|
39
|
+
Aki1000さんはいろいろな方法を知りたいというタイプのようですので、いろいろなやり方を書いておきました。行数が一番短いのは二番目の方法ですが、普通こういうのはやらないでしょう。
|