0

次のコードは、activestate python ヘルプ ファイルに記載されています。このコードは、フォルダー内のファイルを再帰的に削除した後、フォルダー自体を削除するためのものです。pythonでwin32のAPIを使いたいのでエラーを指摘してください

import win32con
import win32api
import os

def del_dir(path):
    for file_or_dir in os.listdir(path):
        if os.path.isdir(file_or_dir) and not os.path.islink(file_or_dir):
            del_dir(file_or_dir) #recursive call to function again
        else:
            try:
                os.remove(file_or_dir) #it's a file,delete is
            except:
                #probably failed because it is not a normal file
                win32api.SetFileAttributes(file_or_dir,win32con.FILE_ATTRIBUTE_NORMAL)
                os.remove(file_or_dir) #it's a file delete it

        os.rmdir(path)#delete the directory here
4

1 に答える 1

1

プログラムの問題は win32api に関するものではありません。OS 関数 (os.remove、win32api.SetFileAttributes) を呼び出すたびに、部分的な名前 (つまり、「パス」の後の部分) のみを渡すため、失敗します。関数の最初の行を次のように変更します。

def del_dir(path):
    for file_or_dir in os.listdir(path):

への変更:

def del_dir(path):
    for x in os.listdir(path):
        file_or_dir = os.path.join(path,x)

残りは同じです。ちなみに、これはディレクトリ全体を削除したり、フォルダ階層を再帰的にたどったりするのは本当に悪いサンプルです。単純なコードには os.walk を使用します。

一般に、win32api と win32con は問題なく動作します。Python シェルを開き、次のはるかに単純なコードを試してください。

>>> import win32api
>>> import win32con
>>> win32api.MessageBox(0, "hello win32api", "win32api", win32con.MB_OK)
于 2012-10-28T08:35:23.693 に答える