Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import asyncio
- import aiofiles
- import os
- import json
- import time
- from pathlib import Path
- # Константы
- main_directory = '/mnt/filesystem_test/subvol-999-disk-0/storage/blobs/pmw6tvzmf2jv6giyybmmvl4o2ahqlaldsaeha4yx74n5aaaaaaaa'
- input_file = 'filelist.txt'
- def move_cursor_up(lines):
- return f"\033[{lines}A"
- # Создаем директорию, если она не существует
- os.makedirs(main_directory, exist_ok=True)
- async def create_file(folder, filename, filesize):
- # Создаём директорию, если она не существует
- folder_path = Path(main_directory) / folder
- folder_path.mkdir(parents=True, exist_ok=True)
- file_path = folder_path / filename
- # Записываем файл в асинхронном режиме
- async with aiofiles.open(file_path, 'wb') as f:
- bytes_to_write = filesize
- # Записываем файл блочно (порциями по 1048576 bytes)
- while bytes_to_write > 0:
- block_size = min(1048576, bytes_to_write)
- await f.write(os.urandom(block_size))
- bytes_to_write -= block_size
- async def process_line(line):
- json_objects = json.loads(line)
- tasks = [
- create_file(obj['folder'], obj['filename'], obj['filesize'])
- for obj in json_objects
- ]
- await asyncio.gather(*tasks)
- return sum(obj['filesize'] for obj in json_objects), len(json_objects)
- async def process_file():
- total_files = 0
- total_size = 0
- start_time = time.time()
- async with aiofiles.open(input_file, 'r', encoding='utf-8') as f:
- lines = await f.readlines()
- for index, line in enumerate(lines, start=1):
- filesize_sum, file_count = await process_line(line.strip())
- total_size += filesize_sum
- total_files += file_count
- # Обновляем статистику каждые 50 строк
- if index % 50 == 0:
- elapsed_time = time.time() - start_time
- speed = total_size / elapsed_time if elapsed_time > 0 else 0
- print(f"Статистика после {index} строк:")
- print(f"Файлов создано: {total_files}")
- print(f"Объем: {total_size} байт")
- print(f"Затраченное время: {elapsed_time:.2f} секунд")
- print(f"Текущая скорость: {speed:.2f} байт/секунд")
- print(move_cursor_up(5), end='') # Перемещаем курсор вверх
- # Финальная статистика
- elapsed_time = time.time() - start_time
- speed = total_size / elapsed_time if elapsed_time > 0 else 0
- print(f"Итоговая статистика:")
- print(f"Файлов создано: {total_files}")
- print(f"Объем: {total_size} байт")
- print(f"Затраченное время: {elapsed_time:.2f} секунд")
- print(f"Текущая скорость: {speed:.2f} байт/секунд")
- if __name__ == '__main__':
- asyncio.run(process_file())
Advertisement
Add Comment
Please, Sign In to add comment