2012-03-06 6 views
1

[編集:最終コードは下記をご覧ください]私は以下のコードを持っています.1つのファイルを選択するためにrandom.choiceコードを挿入する場所を特定しようとしています。コピーそれを繰り返す(ここでは6回)。 1つのディレクトリから'C:\Dir'ループごとにランダムファイルの選択とコピー何回か

import os 
import shutil 
import random 

dir_input = str(input("Enter Source Directory: ")) 
src_files = (os.listdir(dir_input)) 

for x in range (0,5): 
    print ('This is the %d time' % x) 
    for file_name in src_files: 
     full_file_name = (os.path.join(dir_input, file_name)) 
     if (os.path.isfile(full_file_name)): 
     print ('copying...' + full_file_name) 
      shutil.copy(full_file_name, r'C:\Dir')) 
else: 
    print ('Finished!') 
+0

この宿題はありますか? – Daenyth

+0

脇に:範囲(0,5)はあなたに6回を与えません、それはあなたに5つだけを与えます。範囲には上限が含まれません。 – DSM

答えて

2

をあなたの時間をありがとう皆をエル・P。私はいくつかのことを学び(このフォーラムの人々から助けを得て)、コードが大きく変わった。このサイトの人々はとても素晴らしいです。

import os 
import shutil 
import random 
import os.path 

src_dir = 'C:\\' 
target_dir = 'C:\\TEST' 
src_files = (os.listdir(src_dir)) 
def valid_path(dir_path, filename): 
    full_path = os.path.join(dir_path, filename) 
    return os.path.isfile(full_path) 
files = [os.path.join(src_dir, f) for f in src_files if valid_path(src_dir, f)] 
choices = random.sample(files, 5) 
for files in choices: 
    shutil.copy(files, target_dir) 
print ('Finished!') 
1

あなたのコードをコピーし、すべてのファイル。それはあなたが望むものではないようです。また、あなたは一つのファイルを言った。あなたのコードは、入力されたディレクトリのすべてのリストをダンプします。また、入力の代わりにraw_inputを使用することを検討することもできます。ここに私がお勧めするものがあります:

import os 
import shutil 
import random 

# let's seed the random number, it's at least good practice :-) 
random.seed() 
dir_input = raw_input("Enter Source Directory: ") 
# let's get ONLY the files in this directory 
src_files = [ f for f in os.listdir(dir_input) if os.path.isfile(os.path.join(dir_input,f))] 
for x in range (0,5): 
    print ('This is the %d time' % x) 
    # I'll let you copy this where you want, but this will 
    # choose a random file once per loop 
    print random.choice(src_files) 

私が誤解しているかどうか教えてください。

+0

ありがとうございます。いいえ、それは宿題ではありません。私はそれが欲しかった!私は社会学の卒業生で、私はPythonを本から教えているので、データベース用の250k txtファイルを操作することができます。私はとても新しいので、これが何をしているのかを正確に把握しなければなりません。 – user1252778

+0

私はあなたのイニシアチブに感心しています!あなたの研究で最高のあなたを願って! – macduff

1

フィルター最初のパスは、あなたが唯一の有効な選択肢含むリストを取得して:

choices = random.sample(files, n) 
:あなたはn個のユニークなファイルをしたい場合は、次に

def valid_path(dir_path, filename): 
    full_path = os.path.join(dir_path, filename) 
    return os.path.isfile(full_path) 

files = [f for f in src_files if valid_path(dir_input, f)] 

を、あなたはrandom.sample()を使用することができます

それとも、むしろ、同じファイルの複数のインスタンスを許可する場合:

choices = [random.choice(files) for i in range(n)] 
+0

ありがとう、これは主に動作しています。 「No such file or directory」というドライブ文字が変更されたというエラーが表示されます。私はそれが何らかの理由でローカルに見ていると思う。私がそれを働かせたら、私は解決策を投稿します。私は助けに感謝します。 – user1252778

+0

@ user1252778:どうぞよろしくお願いいたします。追加のヘルプが必要な場合は、更新されたコードや詳細なエラーメッセージを投稿してください。 –

0

最後のステートメントをインデントしないと、コピー中にメッセージが5回表示され、後には表示されません。

+0

ありがとう!私はそれを変えた。 – user1252778