-1

次のようにファイルを削除したい:

path = "username/hw/01/"
file_list = ["main.cc", "makefile"]
files = os.listdir(path)
del_files = list(set(files) - set(file_list))
for del_file in del_files:
  try:
    os.remove(path + del_file)
  except FileNotFoundError as e:
    print("\t" + e.strerror)
  except OSError as e:
    print("\t" + e.strerror)

これは機能していません。走ってみたら

....
try:
  os.remove(path + del_file)
  os.remove(path + del_file)
except ...

例外が発生します。ただし、たとえば ls や nautilus で確認すると、ファイルはまだ存在します。

機能するのは

files = os.listdir(path)
del_files = list(set(files) - set(file_list))
while (del_files):
  for del_file in del_files:
    try:
      os.remove(path + del_file)
      time.sleep(0.5)
      print("\t\tRemoving " + path + del_file)
    except FileNotFoundError as e:
      print("\t" + e.strerror)
    except OSError as e:
      print("\t" + e.strerror)
  files = os.listdir(path)
  del_files = list(set(files) - set(file_list))

これは信じられないほど醜いです。print ステートメントが含まれている場合、要求されたすべてのファイルを取得するために複数回実行されます。私は何が欠けていますか?

それが問題なら、

$ python3 --version
Python 3.4.3
4

1 に答える 1