如何在另一个目录下复制文件夹结构?

11

我有一些关于复制文件夹结构的问题。实际上,我需要将PDF文件转换为文本文件。因此,我在导入PDF的地方有这样一个文件夹结构:

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

我想在“D:/g/subfolder1/subfolder2/”下创建完全相同的文件夹结构,但不包括pdf文件,因为我需要在这个位置放置转换后的文本文件。所以,在转换功能之后,它给了我

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

另外我想补充一下,如果在“D:/g/”下不存在相同的文件夹结构,请添加函数以确保在创建之前。

这是我的当前代码。那么如何在没有文件的情况下创建相同的文件夹结构呢?

谢谢!

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)))
3个回答

22

对我来说,以下内容是有效的:

  • 迭代现有文件夹

  • 根据现有文件夹构建新文件夹的结构

  • 检查新文件夹结构是否不存在
  • 如果不存在,则创建不带文件的新文件夹

代码:

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

文档:


太棒了!;)) - SXC88
2
注意:dirpath[len(inputpath):] 假设 inputpath 以路径名组件分隔符(如 '/')结尾,这与问题中显示的内容相匹配,但通常在指定目录路径时不需要(因此经常不存在),但此代码依赖于它。 - martineau
4
为了避免我上一条评论中提到的可能出现的尾部分隔符问题,我建议使用 os.path.relpath(dirpath, inputpath) 代替 dirpath[len(inputpath):],这样可以适用于任何情况。这表明,将路径管理视为简单的字符串会带来麻烦,因此采用这种方式可以避免这种问题的潜在风险。 - martineau

10

使用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 without files


这是我的理解:您有一个包含一些PDF文件的srcDir目录。您还有一个dstDir目录,其中您希望有转换为.txt格式的文件。同时,您想要保留目录结构,并且希望目标目录与源目录具有相同的目录结构。我是否有什么误解或者您需要其他的东西? - kumardeepakr3
Traceback (most recent call last): File "C:/Users/sxc/Desktop/python file/pdf converter/pdfminer-20140328/b.py", line 12, in <module> shutil.copytree(inputpath, outputpath, ignore=ig_f) File "C:\Python27\lib\shutil.py", line 177, in copytree os.makedirs(dst) File "C:\Python27\lib\os.py", line 157, in makedirs mkdir(name, mode) WindowsError: [Error 183] : 'D:/g/' 出现了这个错误信息。我还想用if语句测试一下在创建之前“D:/g/”下是否已经存在文件夹结构。 - SXC88
1
调用copytree()函数时,文件夹D:/g/不能存在。错误就是因为这个。在执行代码之前尝试删除该目录。 - kumardeepakr3

1

针对跳过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)))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接