最初に、明らかにlambda
の使用は役に立たず、glob
関数はこのフィルタリングを実行できます。これはglob
が実際に行うことなので、基本的にコードを不要な関数呼び出しで浪費しているため、パフォーマンス面でかなり高価です。あなたと同じで、この例では
見て、:
import glob
# Find all .py files
sourcepath= 'C:/my/store/path/*.py'
paths = glob.glob(sourcepath)
# Find files that end with 'codes'
destpath= 'C:/my/store/path/*codes'
paths2 = glob.glob(destpath)
第二に、第二glob
関数呼び出したりしてもよいないにあなたのディレクトリ/ファイルを移動するディレクトリのリストを返します。これにより、あなたのコードはC:/ my/store/path contains. That is, you must guarantee that 'C:/my/store/path
にディレクトリと決してファイルのみを含まなければならないので、glob
はshutil.move
で使用されるディレクトリだけを返します。後でユーザーが「C:/ my/store/path」という名前のファイルで、「codes」という名前で終了し、拡張子を指定しなかった場合(たとえばcodes.txt、codes.py ...)返されたglob
のリストのファイルはpaths2
にあります。もちろん、サブディレクトリだけを格納するディレクトリを保証することは問題であり、まったく良い考えではありません。あなたは、あなたが、filter
にあなたの最初の呼び出しでは、あなたがglob
自体では達成することができます何かを10
が含まれていない任意の文字列をフィルタリングするためにfilter
の助けを借りてlambda
を使用しているos.path.isdir
お知らせ何かを通じてディレクトリをテストすることができます:
glob.glob('C:/my/store/path/*10*')
は今すぐ任意のファイルまたはCのサブディレクトリ:/私/店舗/パス名に10が含まれている
glob
関数の戻りリストに収集することができるでしょう。
第3に、zip
は、引数リストの中で最短のiterableに切り捨てられます。言い換えれば、あなたはpaths2
にpaths
へのすべてのパスにごとパスを移動したい場合、あなたはlen(paths) == len(paths2)
がそうpaths
内の各ファイルまたはディレクトリがpaths2
にまで移動するdirectory
を持っている必要があります。
第四に、あなたはfor
ループのために、あなたがi
代わりのI
を使用shutil.move
の呼び出しにセミコロンを逃しました。Pythonは大文字と小文字が区別言語であり、I
大文字がi
小文字とまったく同じではありません。
import shutil
for I,j in zip(selected_path,selected_path1) # missing :
shutil.move(i, j) # i not I
修正されたコード:
import shutil
for I,j in zip(selected_path,selected_path1) # missing :
shutil.move(I, j) # i not I
おそらく、paths2
はCのサブディレクトリのみが含まれています/私/店舗/パスディレクトリが、これは間違いなくないあなたのコードを書くためのより良いアプローチですが、最高:
import glob
#paths from source folder
sourcepath='C:/my/store/path/*10*'
paths = glob.glob(sourcepath)
#paths from destination folder
destpath='C:/my/store/path/*20*'
paths2 = glob.glob(destpath)
import shutil
for i,j in zip(paths,paths2):
shutil.move(i, j)
*上記の問題のいくつかは、このコードにも適用されます。
あなたはこの回答を読んで長いマラソンを終えたので、コードを改善するために何をしたいですか?あなたがまだ曖昧なものを見つけたら、私は喜んで助けてくれるでしょう。
幸運にも:)
「ラムダ」機能で何を達成しようとしていますか? 'glob'関数からすぐにパスをフィルタリングすることができます。 – direprobs
@direprobsこれは問題ではありません。問題は 'shutil.move(i、j)' –