Python - пустые каталоги и подкаталоги после функции shutil.copytree
Это часть программы, которую я пишу. Цель состоит в том, чтобы извлечь все файлы GPX, скажем, в G:\ (указано с помощью -e G:\ в командной строке). Это создаст папку 'Exports' и создаст дамп всех файлов с соответствующими расширениями, то есть рекурсивно. Прекрасно работает, друг помог мне написать это!! Проблема: пустые каталоги и подкаталоги для каталогов, которые не содержат файлы GPX.
import argparse, shutil, os
def ignore_list(path, files): # This ignore list is specified in the function below.
ret = []
for fname in files:
fullFileName = os.path.normpath(path) + os.sep + fname
if not os.path.isdir(fullFileName) \
and not fname.endswith('gpx'):
ret.append(fname)
elif os.path.isdir(fullFileName) \ # This isn't doing what it's supposed to.
and len(os.listdir(fullFileName)) == 0:
ret.append(fname)
return ret
def gpxextract(src,dest):
shutil.copytree(src,dest,ignore=ignore_list)
Позже в программе у нас есть призыв extractpath()
:
if args.extractpath:
path = args.extractpath
gpxextract(extractpath, 'Exports')
Таким образом, вышеупомянутое извлечение работает. Но len
Вызов функции выше предназначен для предотвращения создания пустых папок и не позволяет. Я знаю, что лучший способ это os.rmdir
как-то после экспорта, и пока ошибки нет, папки остаются.
Так как я могу успешно удалить эту папку Exports, чтобы в ней находились только каталоги с GPX?:)
1 ответ
Если я вас правильно понимаю, вы хотите удалить пустые папки? Если это так, вы можете выполнить операцию удаления папки снизу вверх - что не удастся для любых папок, которые не являются пустыми. Что-то вроде:
for root, dirs, files in os.walk('G:/', topdown=true):
for dn in dirs:
pth = os.path.join(root, dn)
try:
os.rmdir(pth)
except OSError:
pass