フォルダ構造のコピーに関連するいくつかの質問があります。実際、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)))
私にとって、以下はうまく機能します:
既存のフォルダを繰り返し処理します
既存のフォルダに基づいて新しいフォルダの構造を構築します
コード:
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!")
ドキュメンテーション:
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)
この関数を呼び出す前に、作成するディレクトリが存在していてはなりません。そのためのチェックを追加できます。
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置換、および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)