2017-12-11 16 views
1

私は、10番目のファイルをすべて、Pythonスクリプトを使用してフォルダから削除したいと考えています。私は周りを見回したと、このコードを見つけました:すべてのn番目のファイルを削除するPython

import os 
l = os.listdir('/Users/myname/Desktop/TBD') 

for n in l[::10]: 
    os.unlink(n) 

私はこのためにPythonスクリプトを作成し、その後

python filename.py 

を使用して、端末でそれを実行し、これは私がお返しに得るものです:

FileNotFoundError: [Errno 2] No such file or directory: 'Pic-1.jpg' 

私がコードで指しているフォルダは1000枚の写真が入ったフォルダです。最初のフォルダの名前を読み込んでいますが、削除処理は行われません。これを行うより良い方法はありますか?

答えて

0

listdir()は、指定されたフォルダ内のエントリの名前だけをパス要素なしで返すためです。したがって、これらのファイルのリンクを解除しようとすると、現状の作業ディレクトリのコンテキストでは、/Users/myname/Desktop/TBD/ではなく、その作業を実行しようとします。リンクを解除する各ファイル名にパスを追加するか、/Users/myname/Desktop/TBDが作業ディレクトリであることを確認してください。

import os 

dir_to_clean = '/Users/myname/Desktop/TBD' 
l = os.listdir(dir_to_clean) 

for n in l[::10]: 
    target = dir_to_clean + '/' + n 
    if os.path.isfile(target): 
     os.unlink(target) 
+0

だから私は、内のコードをポップし、それが実行されます。リンクを解除しようとしている要素が、実際にはファイルではなく、すなわち、ディレクトリまたは何か他のものであれば

また、一般的な安全性のために、あなたは確認する必要があります。写真1-10を削除して残っているようです。私は一度に10枚の写真を削除したいと思っています。例えば、スクリプトを実行した後の100枚の写真のフォルダがあれば、10枚残っているはずです。私はコードが "n"の写真を取り出すように指定していることに気がついたので、それは繰り返されていません。 – D500

+1

@ D500、あなたの質問はフォルダから10番目のファイルをすべて削除することです。そのため、100 - > [10,20,30,40,50,60,70,80,90,100]のうち90が残っているはずです。 – srig

+0

質問を変更しました。私はコードをn = 2に変更し、10回ではなく、3回実行しました。しかし、コードは奇妙な方法で動作します。 2枚目の写真が1枚目のように見えますが、2枚目の写真がすべて削除され、2枚目の写真では最初の2枚のファイルが保存され、その後2枚目の写真が削除されます。これが繰り返されます..なぜこれはこのように機能しますか? – D500

関連する問題