Merge pull request #11 from IliaMiheev/make-zipManager

Make zip manager
This commit was merged in pull request #11.
This commit is contained in:
Ilia Miheev
2025-10-13 16:53:14 +03:00
committed by GitHub
5 changed files with 112 additions and 8 deletions
+1 -1
View File
@@ -2,8 +2,8 @@ __pycache__
*.html *.html
*.csv *.csv
*.json *.json
*.zip
ideas.md ideas.md
*copy* *copy*
test/
venv/ venv/
+58 -6
View File
@@ -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,13 +294,47 @@ t = TimerManager()
# Засекаем время # Засекаем время
t.start() t.start()
sleep(2) sleep(2) # имитация двухсекундной работы
t.end() t.end()
# Выводим результат в разных форматах # Выводим результат в разных форматах
print(f"Время работы в секундах: {t.getWorkTime()}") # 2.0008320808410645 print(f"Время работы в секундах: {t.getWorkTime()}") # 2.0008320808410645
print(f"Время работы в минутах: {t.getWorkTime(ndigits=2, format='minutes')}") # 0.03 print(f"Время работы в минутах: {t.getWorkTime(ndigits=2, format='minutes')}") # 0.03
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')
``` ```
Если ты дочитал(-а) документацию до конца, то получай пожизненный запас здоровья❤. Помни, оно у тебя одно. Если ты дочитал(-а) документацию до конца, то получай пожизненный запас здоровья❤. Помни, оно у тебя одно.
+51
View File
@@ -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)
+1
View File
@@ -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
+1 -1
View File
@@ -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',