Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
python script that split files in folder for cd burning
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os, operator, sys
from glob import glob
from optparse import OptionParser
usage = "usage: %prog [options] path_to_directory"
parser = OptionParser(usage=usage)
parser.add_option("-s", "--size", type="int", dest="cdsize", default=700,
help="block size in megabytes", metavar="MB")
(options, args) = parser.parse_args()
if len(args) <> 0:
dir = args[0]
else:
dir = ""
cdsize = options.cdsize
# Проверка заданного каталога
if dir <> "":
if os.path.isdir(dir):
if dir[-1] <> "/":
dir += "/"
else:
print "Неверный аргумент!\n",dir,"не является каталогом."
sys.exit(1)
print "Размер блока:",cdsize,"Mb\n"
# Перевод размера в байты
cdsize *= 1024*1024
# Создаётся список с именами файлов и их размерами
files = []
for i in glob(dir+"*"):
if os.path.isfile(i):
files.append([os.path.basename(i), os.path.getsize(i)])
# Проверка длины списка
if len(files) == 0:
print "Ошибка. Не удалось получить список файлов в каталоге",dir
sys.exit(1)
# Сортировка списка по размеру файла
files.sort(key=operator.itemgetter(1))
# Меняем порядок от большего к меньшему
files.reverse ()
# Сравниваем наибольший файл с размером блока
if files[0][1] > cdsize:
print "Ошибка! Не хватает места."
sys.exit(1)
# В эту переменную записывается количество виртуально записанных дисков
cdnum = 0
while len(files)>0:
# размер добавленных на диск данных
stsize = 0
i = 0
while i<len(files):
if files[i][1] <= (cdsize - stsize):
# Если места достаточно, увеличиваем размер добавленных данных
stsize = stsize + files[i][1]
print '%.2f'%(files[i][1]/1024/1024.),"\t",files[i][0]
# Удаляем использованный элемент
del files[i]
else:
i += 1
cdnum += 1
# Небольшая статистика
print "-----\nTotal:\t",'%.2f'%(stsize/1024/1024.),"Mb\nUsage:\t",'%.2f'%(stsize/(cdsize/100.)),"%\n----< ",cdnum," >----\n"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment