2017-07-17 10 views
0

このPythonコードを改善するにはどうすればよいですか?私はすべての拡張子を含むリストをここに追加したいと思います。リストの助けを借りて、拡張機能の "src"ディレクトリを検索し、それらを目的地に移動したいと思います。ダブルループとPythonは拡張子に基づいてファイルを移動しますか?

import shutil 
import glob 
import os 

dest_dir = "/home/xxxx/Software/" 
dest_dir2 = "/home/flyingpizza/Pictures/" 

for file in glob.glob(r'/home/xxxxx/Downloads/*.pdf'): 
    print (file) 
    shutil.move(file,dest_dir) 

for file in glob.glob(r'/home/xxxx/Downloads/*.docx'): 
    print(file) 
    shutil.move(file, dest_dir) 

for file in glob.glob(r'/home/xxxx/Downloads/*.exe'): 
    print(file) 
    shutil.move(file,dest_dir) 

for file in glob.glob(r'/home/xxxx/Downloads/*.jpg'): 
    print(file) 
    shutil.move(file,dest_dir2) 

for file in glob.glob(r'/home/xxxxx/Downloads/*.torrent'): 
    print(file) 
    os.remove(file) 
+1

たぶん一番上に__future__インポートprint_function'から '追加するので、このコードは実際に動作する助けのためのタグ付けのpython-2.7 ;-) – Dilettant

答えて

1

私は目的地と値として「キー」を使用し、どこでたとえば{'/home/xxx/Pictures': ['jpg','png','gif'], ...}のために、場所や拡張の辞書を使用します各宛先の内線番号のリストです。

source = '/home/xxx/randomdir/' 
mydict = { 
    '/home/xxx/Pictures': ['jpg','png','gif'], 
    '/home/xxx/Documents': ['doc','docx','pdf','xls'] 
} 
for destination, extensions in mydict.items(): 
    for ext in extensions: 
     for file in glob.glob(source + '*.' + ext): 
      print(file) 
      shutil.move(file, destination) 

ファーブルのソリューションは良いですが、あなたはここにあなたがいる限り、あなたはそれを適切なdict

を与えるとして、すべてを行いトリプルループを持っているのに対し、すべての移動先のフォルダのための彼のダブルループ・ソリューションを繰り返さなければならないだろうが

また、あなたのように反復的に見えるコードを書く場合は、引数を取るループまたは関数を使用してコードを単純化する方法があることを確認してください。

+0

おかげで動作します!あなたのコードに "os.replace(file、destination)"を追加して既存のファイルを置き換えました。 –

1

formatを使用してパターンを生成:

for ext in ["docx","pdf","exe","jpg"]: 
    for file in glob.glob('/home/xxxxx/Downloads/*.{}'.format(ext)): 
     print (file) 
     shutil.move(file,dest_dir) 
1

別の拡張可能なソリューション

import os 
import shutil 

dir1 = "/home/xxxx/Software/" 
dir2 = "/home/flyingpizza/Pictures/" 

def moveto(dst): 
    return lambda src: shutil.move(src, dst) 

action = { 
    'pdf': moveto(dir1), 
    'docx': moveto(dir1), 
    'exe': moveto(dir1), 
    'jpg': moveto(dir2), 
    'torrent': os.remove, 
} 

src_dir = '/home/xxxxx/Downloads' 
for file in os.listdir(src_dir): 
    ext = os.path.splitext(file)[1][1:] 
    if ext in action: 
     action[ext](os.path.join(src_dir, file)) 
関連する問題