Created
August 4, 2011 21:05
-
-
Save drakulavich/1126281 to your computer and use it in GitHub Desktop.
python script that split files in folder for cd burning
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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