Как указывали другие, вы должны использовать zipfile . Документация сообщает вам, какие функции доступны, но на самом деле не объясняет, как вы можете использовать их, чтобы застегнуть весь каталог. Я думаю, что проще всего объяснить с помощью некоторого примера кода:
#!/usr/bin/env python
import os
import zipfile
def zipdir(path, ziph):
# ziph is zipfile handle
for root, dirs, files in os.walk(path):
for file in files:
ziph.write(os.path.join(root, file))
if __name__ == '__main__':
zipf = zipfile.ZipFile('Python.zip', 'w', zipfile.ZIP_DEFLATED)
zipdir('tmp/', zipf)
zipf.close()
Адаптировано из: http://www.devshed.com/c/a/Python/Python-UnZipped/
Используйте классы CSS и включайте или выключайте их в своем методе click вместо установки стилей с помощью javascript.
Фрагмент:
const menu = document.querySelector('aside');
const nav = document.querySelector('nav');
menu.addEventListener('click', () => {
nav.classList.toggle("margin");
menu.classList.toggle("left");
})
aside {
border-right: 1px solid #e2e2e2;
width: 3vw;
height: 100vh;
line-height: 100vh;
position: fixed;
top: 0;
left: 0;
transition: 1s;
-webkit-transition: 1s;
-ms-transition: 1s;
-moz-transition: 1s;
}
nav {
width: 97vw;
height: 100vh;
margin-left: -100vw;
transition: 1s;
-webkit-transition: 1s;
-ms-transition: 1s;
-moz-transition: 1s;
}
.margin {
margin-left: 0;
}
.left {
left: 97vw;
}
<aside>
menu
</aside>
<nav>
<ul>
<li>Home</li>
<li>ABOUT</li>
<li>Contact</li>
</ul>
</nav>
Используйте transform: translateX()
вместо поля. Вы также должны написать некоторое состояние вашего меню, то есть открыто / закрыто. Вы можете использовать класс css для этого, и в вашем eventListener вы можете проверить, если меню opened
, затем включить анимацию от translateX(0)
до translateX(-100%)
и удалить класс opened
.
Или вы можете написать стили с переходами или анимацией @keyframes, все будет работать. Сначала создайте идею сохранения открытого состояния.