How to copy folder structure under another directory?

喜你入骨 提交于 2019-12-09 17:50:28

问题


I have some questions related to copying a folder structure. In fact, I need to do a conversion of pdf files to text files. Hence I have such a folder structure for the place where I import the pdf:

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

And I would like to create the exact folder structure under "D:/g/subfolder1/subfolder2/" but without the pdf file since I need to put at this place the converted text file. So after the conversion function it gives me

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

And also I would like to add if function to make sure that under "D:/g/" the same folder structure does not exist before creating.

Here is my current code. So how can I create the same folder structure without the file?

Thank you!

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)))

回答1:


For me the following works fine:

  • Iterate over existing folders

  • Build the structure for the new folders based on existing ones

  • Check, if the new folder structure does not exist
  • If so, create new folder without files

Code:

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!")

Documentation:

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



回答2:


How about using 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)

The directory you want to create should not exist before calling this function. You can add a check for that.

Taken from shutil.copytree without files




回答3:


A minor tweak to your code for skipping pdf files:

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)))



回答4:


If root string is unique this is easily done using re.sub replacement, and os.walk otherwise you can use slicing on the path string and 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)


来源:https://stackoverflow.com/questions/40828450/how-to-copy-folder-structure-under-another-directory

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!