2016-04-01 2 views
0
from CaseManager import d2 
import shutil 

d11 = d2 + '/ReconstructedObjects/' 
if not os.path.isdir(d2): 
    try: 
     os.mkdir(d2) 
    except OSError as esc: 
     if exc.errno != errno.EEXIST: 
      raise 

nFiles = ('How many objects would you like to concatenate?') 
catFile1 = raw_input('Specify the first Object ID') 
catFile2 = raw_input('Specify the second Object ID') 
catFile3 = raw_input('Specify the third Object ID') 

d11 = open(CatFile, 'wb') 
shutil.copyfileobj(open(catFile1, 'rb'), d11) 
shutil.copyfileobj(open(catFile2, 'rb'), d11) 
shutil.copyfileobj(open(catFile3, 'rb'), d11) 
d11.close() 

Привет, я хотел бы, чтобы связать любое количество файлов, которые пользователь задает. Пользователю будет предложено указать количество файлов из nFiles var.Создание счетчика, основанного на пользовательском вводе

Ограничения этого кода заключаются в том, что если пользователь указывает, что они хотят объединить четыре файла, они не могут этого сделать.

Как бы я динамически реализовал shutil.copyfileobj(open(catFile3, 'rb'), d11), в частности, на основе пользовательского ввода в nFiles?

+0

Возможно ли это? –

ответ

0

Используйте циклы и, возможно, списки. Самый простой способ преобразовать свой код для работы с любым количеством файлов - это сначала цикл nFiles раз, каждый раз запрашивая другое имя файла и помещая его в список. Затем прокрутите список имен файлов, выполнив операцию копирования на каждом из них.

Но, вы могли бы также компактные вещи еще и сделать шаг конкатенации сразу после того, как говорят, имя файла, без необходимости держать его в списке:

n_files = int(raw_input('How many objects would you like to concatenate?') 
with open(d11, 'wb') as destination_file: 
    for i in range(n_files): 
     fn = raw_input('Specify the ID of Object #{}'.format(i+1)) 
     with open(fn, 'rb') as cat_file: 
      shutil.copyfileobj(cat_file, destination_file) 

Я изменил некоторые имена переменных чтобы следовать общему стилю Python (lowercase_with_underscores для большинства переменных). Вы можете, конечно, использовать свой собственный стиль, если хотите (просто быть последовательным!). Я также использовал операторы with для автоматического закрытия файлов для нас, что лучше, чем полагаться на их закрытие, когда у них больше нет ссылок.