Make zip manager #11
+1
-1
@@ -2,8 +2,8 @@ __pycache__
|
|||||||
*.html
|
*.html
|
||||||
*.csv
|
*.csv
|
||||||
*.json
|
*.json
|
||||||
|
*.zip
|
||||||
|
|
||||||
ideas.md
|
ideas.md
|
||||||
*copy*
|
*copy*
|
||||||
test/
|
|
||||||
venv/
|
venv/
|
||||||
@@ -1,8 +1,18 @@
|
|||||||
# Библиотека для работы с файлами во время парсинга
|
## Библиотека для работы с файлами во время парсинга
|
||||||
|
|
||||||
Во время парсинга часто приходится скачивать html-страницы, работать с json- и csv-файлами. Эта библиотека призвана облегчить написание кода для такого рода задач. Библиотека создавалась для удобства работы во время парсинга, но ничто не мешает использовать её просто для работы с json, csv и прогресс-барами.
|
Во время парсинга часто приходится скачивать html-страницы, работать с json- и csv-файлами. Эта библиотека призвана облегчить написание кода для такого рода задач, а так же предоставляет ряд дополнительных возможностей.
|
||||||
|
|
||||||
В библиотеке есть три класса для отдельных работ: Pars для работы с запросами и bs4, JsonManager для работы с json и CsvManager для работы с csv. Так же есть один класс для улучшения пользовательского опыта — ProgressBarManager, который создаёт прогресс-бар
|
#### В библиотеке есть три класса для основных работ:
|
||||||
|
|
||||||
|
1. **Pars** для работы с запросами и bs4
|
||||||
|
2. **JsonManager** для работы с json
|
||||||
|
3. **CsvManager** для работы с csv
|
||||||
|
|
||||||
|
#### Так же есть три вспомогательных класса:
|
||||||
|
|
||||||
|
1. **ProgressBarManager** для создания прогресс-баров
|
||||||
|
2. **TimerManager** для засечения времени выполнения определённого кода
|
||||||
|
3. **ZipManager** для архивации файлов и папок
|
||||||
|
|
||||||
Установить библиотеку:
|
Установить библиотеку:
|
||||||
|
|
||||||
@@ -10,6 +20,8 @@
|
|||||||
pip install ipars
|
pip install ipars
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Навигация
|
||||||
|
|
||||||
- [Работа с Pars](#работа-с-pars)
|
- [Работа с Pars](#работа-с-pars)
|
||||||
- [Коротко о методах](#коротко-о-методах-pars)
|
- [Коротко о методах](#коротко-о-методах-pars)
|
||||||
- [Пример парсера с использованием ipars](#пример-парсера-с-использованием-ipars)
|
- [Пример парсера с использованием ipars](#пример-парсера-с-использованием-ipars)
|
||||||
@@ -26,6 +38,9 @@ pip install ipars
|
|||||||
- [Работа с TimerManager](#работа-с-timermanager)
|
- [Работа с TimerManager](#работа-с-timermanager)
|
||||||
- [Коротко о методах](#коротко-о-методах-timermanager)
|
- [Коротко о методах](#коротко-о-методах-timermanager)
|
||||||
- [Пример использования](#пример-использования-timermanager)
|
- [Пример использования](#пример-использования-timermanager)
|
||||||
|
- [Работа с ZipManager](#работа-с-zipmanager)
|
||||||
|
- [Коротко о методах](#коротко-о-методах-zipmanager)
|
||||||
|
- [Пример использования](#пример-использования-zipmanager)
|
||||||
|
|
||||||
## Работа с Pars
|
## Работа с Pars
|
||||||
|
|
||||||
@@ -194,8 +209,11 @@ c.pprint(rows)
|
|||||||
1. **max**: обязательный параметр, который указывает максимальное значение итераций в прогресс-баре
|
1. **max**: обязательный параметр, который указывает максимальное значение итераций в прогресс-баре
|
||||||
|
|
||||||
2. **message**: сообщение перед прогресс-баром
|
2. **message**: сообщение перед прогресс-баром
|
||||||
|
|
||||||
3. **color**: цвет прогресс-бара
|
3. **color**: цвет прогресс-бара
|
||||||
|
|
||||||
4. **fill**: заполнитель для сделанной части
|
4. **fill**: заполнитель для сделанной части
|
||||||
|
|
||||||
5. **width**: размер прогресс-бара в символах
|
5. **width**: размер прогресс-бара в символах
|
||||||
|
|
||||||
```py
|
```py
|
||||||
@@ -276,7 +294,7 @@ t = TimerManager()
|
|||||||
|
|
||||||
# Засекаем время
|
# Засекаем время
|
||||||
t.start()
|
t.start()
|
||||||
sleep(2)
|
sleep(2) # имитация двухсекундной работы
|
||||||
t.end()
|
t.end()
|
||||||
|
|
||||||
# Выводим результат в разных форматах
|
# Выводим результат в разных форматах
|
||||||
@@ -285,6 +303,40 @@ print(f"Время работы в минутах: {t.getWorkTime(ndigits=2, for
|
|||||||
print(f"Время работы в часах: {t.getWorkTime(ndigits=4, format='hours')}") # 0.0006
|
print(f"Время работы в часах: {t.getWorkTime(ndigits=4, format='hours')}") # 0.0006
|
||||||
```
|
```
|
||||||
|
|
||||||
|
## Работа с ZipManager
|
||||||
|
|
||||||
|
Класс ZipManager нужен для архивации папоки файлов. Он принимает принимает только один аргумент — уровень сжатия файлов.
|
||||||
|
|
||||||
|
'none' => Без сжатия
|
||||||
|
|
||||||
|
'normal' => Обычное сжатие
|
||||||
|
|
||||||
|
'hard' => Увеличенное сжатие
|
||||||
|
|
||||||
|
'maximum' => Максимальное сжатие
|
||||||
|
|
||||||
|
```py
|
||||||
|
from ipars import ZipManager
|
||||||
|
|
||||||
|
z = ZipManager()
|
||||||
|
```
|
||||||
|
|
||||||
|
### Коротко о методах ZipManager
|
||||||
|
|
||||||
|
1. Метод **zip_file** используется для архивирования одного файла. Принимает путь до исходного файла и путь выходного файла
|
||||||
|
|
||||||
|
2. Метод **zip_folder** используется для архивирования каталога. Принимает путь до исходного каталога и путь выходного файла
|
||||||
|
|
||||||
|
### Пример использования ZipManager
|
||||||
|
|
||||||
|
```py
|
||||||
|
from ipars import ZipManager
|
||||||
|
z = ZipManager(compression='maximum')
|
||||||
|
|
||||||
|
z.zip_file('./your_file.txt', 'file_archive_maximum.zip')
|
||||||
|
z.zip_folder('./your_folder/', 'folder_archive_maximum.zip')
|
||||||
|
```
|
||||||
|
|
||||||
Если ты дочитал(-а) документацию до конца, то получай пожизненный запас здоровья❤. Помни, оно у тебя одно.
|
Если ты дочитал(-а) документацию до конца, то получай пожизненный запас здоровья❤. Помни, оно у тебя одно.
|
||||||
|
|
||||||
+999999 HP
|
+999999 HP
|
||||||
|
|||||||
@@ -0,0 +1,51 @@
|
|||||||
|
import os
|
||||||
|
import zipfile
|
||||||
|
|
||||||
|
class ZipManager:
|
||||||
|
"""
|
||||||
|
Параметр:
|
||||||
|
- compression (str):
|
||||||
|
- 'none': Без сжатия
|
||||||
|
- 'normal': Обычное сжатие
|
||||||
|
- 'hard': Увеличенное сжатие
|
||||||
|
- 'maximum': Максимальное сжатие
|
||||||
|
"""
|
||||||
|
def __init__(self, compression :str = 'normal'):
|
||||||
|
self.compression = self.setСompression(compression)
|
||||||
|
|
||||||
|
def setСompression(self, compressionStr):
|
||||||
|
if compressionStr == 'none':
|
||||||
|
return zipfile.ZIP_STORED
|
||||||
|
elif compressionStr == 'normal':
|
||||||
|
return zipfile.ZIP_DEFLATED
|
||||||
|
elif compressionStr == 'hard':
|
||||||
|
return zipfile.ZIP_BZIP2
|
||||||
|
elif compressionStr == 'maximum':
|
||||||
|
return zipfile.ZIP_LZMA
|
||||||
|
else:
|
||||||
|
raise ValueError("Некорректное значение compression. Допустимы значения none, normal, hard, maximun")
|
||||||
|
|
||||||
|
def zipFile(self, filePath:str, zipFilePath:str):
|
||||||
|
"""Архивируем один файл
|
||||||
|
|
||||||
|
filePath (str): Путь к файлу, который нужно заархивировать
|
||||||
|
zipFilePath (str): Путь к выходному ZIP-файлу
|
||||||
|
"""
|
||||||
|
|
||||||
|
with zipfile.ZipFile(zipFilePath, 'w', compression=self.compression) as zipf:
|
||||||
|
zipf.write(filePath, os.path.basename(filePath))
|
||||||
|
|
||||||
|
def zipFolder(self, folderPath:str, zipFilePath:str):
|
||||||
|
"""Архивируем папку
|
||||||
|
|
||||||
|
folderPath (str): Путь к папке, которую нужно заархивировать
|
||||||
|
zipFilePath (str): Путь к выходному ZIP-файлу
|
||||||
|
"""
|
||||||
|
|
||||||
|
with zipfile.ZipFile(zipFilePath, 'w', compression=self.compression) as zipf:
|
||||||
|
baseName = os.path.basename(os.path.normpath(folderPath))
|
||||||
|
for root, _, files in os.walk(folderPath):
|
||||||
|
for file in files:
|
||||||
|
filePath = os.path.join(root, file)
|
||||||
|
arcname = os.path.join(baseName, os.path.relpath(filePath, folderPath))
|
||||||
|
zipf.write(filePath, arcname)
|
||||||
@@ -3,3 +3,4 @@ from .JsonManagerCode import JsonManager
|
|||||||
from .CsvManagerCode import CsvManager
|
from .CsvManagerCode import CsvManager
|
||||||
from .ProgressBarCode import ProgressBarManager
|
from .ProgressBarCode import ProgressBarManager
|
||||||
from .TimerManagerCode import TimerManager
|
from .TimerManagerCode import TimerManager
|
||||||
|
from .ZipManagerCode import ZipManager
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
|
|||||||
|
|
||||||
setup(
|
setup(
|
||||||
name='ipars',
|
name='ipars',
|
||||||
version='3.6.0',
|
version='3.7.0',
|
||||||
description='Библиотека для работы с файлами во время парсинга',
|
description='Библиотека для работы с файлами во время парсинга',
|
||||||
long_description=open('README.md', encoding='utf-8').read(),
|
long_description=open('README.md', encoding='utf-8').read(),
|
||||||
long_description_content_type='text/markdown',
|
long_description_content_type='text/markdown',
|
||||||
|
|||||||
Reference in New Issue
Block a user