私は、ディレクトリを通って典型的なWindowsインストーラ拡張子を持つファイルを探して削除するスクリプトを書いています。リストを使ってこれを実行すると(つまり、.msiまたは.exeのチェック)、ネストされたループを再び通過するとブレークします。それは私のリストを実行しているように見えますが、拡張子の1つのタイプを削除して再びループを実行し、同じ拡張子を見つけるためにattemtpsが例外をスローします。ここで私は単純に印刷出力されますが、ファイルを削除しない:私はos.removeでそれを実行しようとするとos walk中に既に削除されたファイルのループスロー例外
> C:\Users\User\Documents\Python Scripts>python test.py < test_run.txt
> Found directory: . Found directory: .\test_files
> Deleting test.cub
> Deleting test.idt
> Deleting test.idt
> Deleting test.msi
> Deleting test.msm
> Deleting test.msp
> Deleting test.mst
> Deleting test.pcp
> Deleting test1.exe
それは次のようになります:
Found directory: .
Found directory: .\test_files
Deleting test.cub
Traceback (most recent call last):
File "test.py", line 13, in <module>
os.remove(fileName)
FileNotFoundError: [WinError 2] The system cannot find the file specified: 'test.cub'
私はOSの散歩をよく読んでそれが正常に動作しているようだが、私はこのスクリプトがどこに間違っているのかわからない。以下のコードは次のとおりです。
import os
myList = [".msi", ".msm", ".msp", ".mst", ".idt", ".idt", ".cub", ".pcp", ".exe"]
rootDir = '.'
for dirName, subdrList, fileList in os.walk(rootDir):
print('Found directory: %s' %dirName)
for fileName in fileList:
for extName in myList:
if(fileName.endswith(extName)):
print('\t Deleting %s' % fileName)
os.remove(fileName)
これはそれだった...そして、私は入れ子になったループで休憩が必要だった – Psyllex