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
Другие вопросы по тегам