2016-04-01 16 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変数からファイル数を指定するよう求められます。ユーザー入力に基づいてカウンタを作成する

ユーザが4つのファイルを連結したいと指定した場合、このコードの制限に従うことができません。

具体的には、nFilesのユーザーの入力に基づいてshutil.copyfileobj(open(catFile3, 'rb'), d11)を動的に実装しますか?

+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ステートメントを使ってファイルを自動的に閉じる処理を行っていました。これは、参照がなくなったときに閉じるよりも優れています。

関連する問題