web-dev-qa-db-ja.com

別のディレクトリの下にフォルダ構造をコピーする方法は?

フォルダ構造のコピーに関連するいくつかの質問があります。実際、PDFファイルをテキストファイルに変換する必要があります。したがって、私はpdfをインポートする場所のためにそのようなフォルダ構造を持っています:

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

そして、「D:/g/subfolder1/subfolder2/」の下に正確なフォルダ構造を作成したいのですが、変換されたテキストファイルをこの場所に置く必要があるため、pdfファイルはありません。だから、変換関数の後、それは私に与えます

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

また、「D:/g/」の下に同じフォルダ構造が存在しないことを確認するために、if関数を追加して作成したいと思います。

これが私の現在のコードです。では、ファイルなしで同じフォルダ構造を作成するにはどうすればよいですか?

ありがとうございました!

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

私にとって、以下はうまく機能します:

  • 既存のフォルダを繰り返し処理します

  • 既存のフォルダに基づいて新しいフォルダの構造を構築します

  • 新しいフォルダ構造が存在しないかどうかを確認します
  • もしそうなら、ファイルなしで新しいフォルダを作成します

コード:

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

ドキュメンテーション:

13
linusg

Shutdown.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 から取得

8
kumardeepakr3

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

ルート文字列が一意の場合、これはre置換、および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)
0
orgoro