2017-12-17 14 views
0

私は、ディレクトリを通って典型的な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) 

答えて

1

ファイルtest.cubの正しい相対的な名前は.\test_files\test.cubです。

提供する相対名は.\test.cubです。

それはos.walk documentationに言うように:

DIRPATH内のファイルまたはディレクトリに(トップで始まる)完全なパスを取得するには、os.path.join(dirpath, name)を行います。

+0

これはそれだった...そして、私は入れ子になったループで休憩が必要だった – Psyllex

関連する問題