Структура папки копирования Python в другом каталоге

У меня есть несколько вопросов, связанных с копированием структуры папок. На самом деле мне нужно сделать преобразование файлов PDF в текстовые файлы. Следовательно, у меня есть такая структура папок для места, где я импортирую PDF:

D:/f/subfolder1/subfolder2/a.pdf 

И я хотел бы создать точную структуру папок в разделе "D:/g/subfolder1/subfolder2/"но без файла PDF, так как мне нужно поместить в это место преобразованный текстовый файл. Так что после функции преобразования он дает мне

D:/g/subfolder1/subfolder2/a.txt

А также я хотел бы добавить, если функция, чтобы убедиться, что под "D:/g/msgstr "такая же структура папок не существует до создания.

Вот мой текущий код. Итак, как я могу создать такую ​​же структуру папок без файла?

Спасибо!

import converter as c
import os
inputpath = 'D:/f/'
outputpath = 'D:/g/'

for root, dirs, files in os.walk(yourpath, topdown=False):
    for name in files:
      with open("D:/g/"+ ,mode="w") as newfile:
          newfile.write(c.convert_pdf_to_txt(os.path.join(root, name)))

4 ответа

Решение

Для меня прекрасно работает следующее:

  • Перебирать существующие папки

  • Создайте структуру для новых папок на основе существующих

  • Проверьте, не существует ли новая структура папок
  • Если это так, создайте новую папку без файлов

Код:

import os

inputpath = 'D:/f/'
outputpath = 'D:/g/'

for dirpath, dirnames, filenames in os.walk(inputpath):
    structure = os.path.join(outputpath, dirpath[len(inputpath):])
    if not os.path.isdir(structure):
        os.mkdir(structure)
    else:
        print("Folder does already exits!")

Документация:

  • os.walk
  • os.mkdir
  • os.path.isdir

Как насчет использования shutil.copytree()?

import shutil
def ig_f(dir, files):
    return [f for f in files if os.path.isfile(os.path.join(dir, f))]

shutil.copytree(inputpath, outputpath, ignore=ig_f)

Каталог, который вы хотите создать, не должен существовать до вызова этой функции. Вы можете добавить проверку для этого.

Взято из shutil.copytree без файлов

Незначительная настройка вашего кода для пропуска pdf файлы:

for root, dirs, files in os.walk('.', topdown=False):
    for name in files:
        if name.find(".pdf") >=0: continue
        with open("D:/g/"+ ,mode="w") as newfile:
            newfile.write(c.convert_pdf_to_txt(os.path.join(root, name)))

Если корневая строка уникальна, это легко сделать с помощью замены re.sub и os.walk, в противном случае вы можете использовать нарезку на строку пути и os.join

import re
import os
from os import join

def _clone_dirs(self, root, new_root):
    """Walk through root folders and copy to new root"""
    for root_path, _, files in os.walk(root):
        new_folder = re.sub(string=root_path, pattern=root, repl=new_root)
        os.mkdir(new_folder)

def _clone_dirs2(self, root, new_root):
    """Walk through root folders and copy to new root"""
    root_len = len(root)+1
    for root_path, _, _ in os.walk(root):
        new_folder = path.join(new_root, root_path[root_len:])
        os.mkdir(new_folder)
Другие вопросы по тегам