2016-10-19 51 views
0

私はPython 2で作業していますが、このエラーに関するいくつかの投稿、つまりthis postを読んでいます。 しかし、まだエラーが発生しています。 私は何ですか: ディレクトリ内のファイルを読み込みます。特定の文字列が含まれているファイルがあれば、そのディレクトリを削除します。python 2 [エラー32]プロセスが別のプロセスで使用されているため、ファイルにアクセスできません。

def select_poo(): 
path = os.walk('/paila_candonga/') 
texto = 'poo' 
extension = '.tex' 
for root, dirs, files in path: 
    for documento in files: 
     if extension in documento: 
      with open(os.path.join(root, documento), 'r') as fin: 
       for lines in fin: 
        if texto in lines: 
         shutil.rmtree(root) 
        else: 
         continue 

その後、私はエラーを取得する:

WindowsError: [Error 32] The process cannot access the file because it is being used by another process 

私も絶対パスを使用して試してみました:

def select_poo(): 
path = os.walk('/paila_candonga/') 
texto = 'poo' 
extension = '.tex' 
for root, dirs, files in path: 
    for documento in files: 
     if extension in documento: 
      with open(os.path.join(root, documento), 'r') as fin: 
       for lines in fin: 
        if texto in lines: 
         route = (os.path.join(root, documento)) 
         files = os.path.basename(route) 
         folder = os.path.dirname(route) 
         absolut= os.path.dirname(os.path.abspath(route)) 
         todo = os.path.join(absolut, files) 
         print todo 

        else: 
         continue 

それから私が得る:

C:\paila_candonga\la_Arepa.tex 
C:\paila_candonga\sejodio\laOlla.tex 
C:\paila_candonga\sejodio\laPaila.tex 

た場合、私は同じ絶対パスを使用して、一度に1つのファイルを削除するd os.remove( '')、私は問題がありません。 select_poo()とshutil.rmtree(folder)またはos.remove(absolut)を使って一度にすべてのファイルを削除しようとすると、エラー32が発生します。

それぞれの方法でループを実行できますかtodoのパスを削除してエラー32を発生させずに削除しますか?それはここで起こる

答えて

1

おかげで、:

shutil.rmtree(root) 

内:

with open(os.path.join(root, documento), 'r') as fin: 

だから、あなたが使用してこのフォルダを削除できない理由です、あなたのファイルが開いてロックされていこのステートメントは、withステートメントの外で行う必要があります

+0

ありがとうアレックス、それはありません仕事。エラーがまだ残っています=( –

+0

@Chüngelこのフォルダや他のアプリケーションで開かれているこのフォルダのファイルを持っていないと確信していますか? – Alex

+0

Alex、私はPythonでかなり新しいですが、 .remove(absolut)同じファイルがエラーなく削除されるので、エラーは、同時にすべてのファイルを削除している間にプロセスが原因で発生したと考えられます。文字列がドキュメントにあり、パスがxに追加されます。次にwithステートメントの外側で、os.remove(x [0])を実行しますが、次に同じエラーが発生します。私のコードはあなたのアイデアに基づいていますか? –

関連する問題