【问题标题】:How to copy folder structure under another directory?如何复制另一个目录下的文件夹结构?
【发布时间】:2017-04-11 05:45:03
【问题描述】:

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

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

我想在“D:/g/subfolder1/subfolder2/”下创建确切的文件夹结构,但没有 pdf 文件,因为我需要将转换后的文本文件放在这个位置。所以在转换功能之后它给了我

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

我还想添加 if 函数以确保在“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)))

【问题讨论】:

    标签: python directory copy subdirectory


    【解决方案1】:

    对我来说,以下工作正常:

    • 遍历现有文件夹

    • 在现有文件夹的基础上构建新文件夹的结构

    • 检查新文件夹结构是否不存在
    • 如果是这样,创建新文件夹没有文件

    代码:

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

    文档:

    【讨论】:

    • 太棒了! ;))
    • 警告:dirpath[len(inputpath):] 假定 inputpath 以路径名组件分隔符结尾(如 '/'),虽然它与问题中显示的内容匹配,但在指定时通常不需要目录路径(通常不会在那里,但这段代码很重要)。
    • 为了避免我上一条评论中提到的尾随分隔符可能出现的问题,我建议使用os.path.relpath(dirpath, inputpath)(而不是dirpath[len(inputpath):]),这在任何一种情况下都可以使用。去显示,管理路径好像它们只是字符串是自找麻烦,所以这样做可以避免这样做和潜在的问题。
    【解决方案2】:

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

    【讨论】:

    • 这就是我的理解:你有 srcDir 有一些 pdf 文件。并且您有一个 dstDir,您希望在其中转换 .txt 文件。您还想保留目录结构。并希望目标目录与源目录具有相同的目录结构。我哪里做错了,或者你还需要什么额外的东西?
    • Traceback(最近一次调用最后一次):文件“C:/Users/sxc/Desktop/python file/pdf converter/pdfminer-20140328/b.py”,第 12 行,在 shutil .copytree(inputpath, outputpath, ignore=ig_f) 文件“C:\Python27\lib\shutil.py”,第 177 行,在 copytree os.makedirs(dst) 文件“C:\Python27\lib\os.py”中,第 157 行,在 makedirs mkdir(name, mode) WindowsError: [Error 183] : 'D:/g/' 它向我抛出了这个错误消息。我还想在创建之前使用 if 语句测试文件夹结构是否已经存在于“D:/g/”下
    • 文件夹D:/g/在调用copytree()函数时不能存在。错误就是因为这个。在执行代码之前尝试删除该目录。
    【解决方案3】:

    对您的代码稍作调整以跳过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)))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-05-21
      • 2015-05-05
      • 2021-02-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-17
      相关资源
      最近更新 更多