当前位置: 首页 > 知识库问答 >
问题:

如何在包含多个文件夹的目录中迭代文件、对文件进行操作、保存到不同的文件夹集

孙修贤
2023-03-14

我想遍历目录中所有文件夹中的pdf文件,对这些文件进行操作(提取文本,保存到. txt),然后将所有txt保存到具有相同名称但位于不同目录的不同文件夹集中。该函数按预期执行,但不使用子文件夹。我知道有os.walk,但我不知道如何在这里使用它。如果我有所有没有子文件夹的文件,函数就可以工作;它会写入所需的目录。但是我需要遍历文件夹,保存到其他目录中的文件夹。

在一个目录中找到文件,并对其进行操作,保存到另一个目录中。正在尝试os.walk,但未成功合并文件夹结构。

文件夹结构基本上是路径/folder1…folderN

有30K文件,所以希望保留到文件夹系统。

def convertall(pdfDir, txtDir):
    if pdfDir == "": pdfDir = os.walk(path) + "\\" 
    for pdf in os.listdir(pdfDir):     --- tried os.walk here too; 
        fileExtension = pdf.split(".")[-1]
        if fileExtension == "pdf":
            pdfFilename = pdfDir + pdf 
            text = convert(pdfFilename)
            textFilename = txtDir + pdf + ".txt"
            textFile = open(textFilename, "w") 
            textFile.write(text)     

pdfDir = pdfpath
txtDir = txtpath   
convertall(pdfDir)

计划这样做的各种操作,所以希望学习一些通用的解决方案。

共有1个答案

阙辰龙
2023-03-14

os.walk调用时使用top-down=True的格式在每次迭代时返回一个元组(此\u目录\u路径、此\u目录中的目录、此\u目录中的文件)。元组的第二和第三个元素是列表,这意味着您也必须遍历它们。因此,您可以像这样浏览目录结构:


import os


def create_my_new_path(old_root)
    # This gives us everything after /home/user/PDFs, e.g. folderN
    relative_path = os.path.relpath(old_root, "/home/user/PDFs")
    # This returns "/home/user/TXTs/folderN"
    return os.path.join("/home/user/TXTs", relative_path)

for root, directories, files in os.walk("/home/user/PDFs", topdown=True):
    for pdf_filename in files:
        # Use .lower() for the comparison in case there are files that end in ".PDF"
        if pdf_filename[-4:].lower() == ".pdf":
            # the variable `root` may not contain the absolute path
            # depending on what you passed to os.walk, so you might
            # want to use os.path.abspath(root) before passing it 
            # to the path builder
            txt_save_dir = create_my_new_path(root)
            txt_filename = "".join(old_filename[:-4], ".txt")
            result = parse_PDF(os.path.join(root, filename))
            with open(os.path.join(txt_save_dir, txt_filename), "w") as f:
                f.write(result)
    for directory in directories:
        # If you wanted to do something with the subfolders too, you could do it here
        continue

我希望这个例子很容易理解,这样你就可以根据自己的需要调整它。

一些提示:

  1. 建议使用os.path.join来创建文件路径,而不是串联,因为如果操作系统缺少相应的分隔符,它会自动添加该分隔符。如果忘记确保文件夹和文件分开,那么它将写入错误的位置

以下是所有os.path操作:https://docs.python.org/3/library/os.path.html

在这里可以找到os.walk的用法:https://docs.python.org/3/library/os.html

 类似资料:
  • Python版本:2.7.13 操作系统:Windows 因此,我正在编写一个脚本,根据文件名中包含文件夹名的要求,将各种名称的文件复制到特定文件夹中。(我对这一点相当陌生,只是想在工作中创建更高效的脚本——我查看了大量StackOverflow页面和web上的一些地方,但找不到与此特定任务相关的Python) 我已经将文件夹转换为一个字符串列表,我可以搜索文件名,但是当我将它们复制到上面时,它们

  • 问题内容: 我正在尝试压缩包含子文件夹的文件夹。尝试压缩名为10-18-2010_4D的文件夹。以上程序以以下异常结束。请提供有关如何解决此问题的建议。 问题答案: 您需要检查文件是否为目录,因为您无法将目录传递给zip方法。 看一下该页面,该页面显示了如何递归压缩给定目录。

  • 问题内容: 我有一个名为“数据”的文件夹。此文件夹有一个名为“收件箱”的子文件夹,其中有多个“ .txt”文件。可以修改“数据”文件夹,最后会有多个带有“收件箱”子文件夹和“ .txt”文件的子文件夹。我需要监视“收件箱”文件夹中的“数据”文件夹和“ .txt”文件。我怎样才能做到这一点? INotify只是监视文件夹,并在创建子文件夹时弹出事件。创建“ .txt”文件(在哪个文件夹中)时,如何弹

  • 问题内容: 我正在尝试仅将原始文件从一个目录复制到另一个目录,但是某些文件具有相同的名称…我正在尝试使用哈希来比较文件,如果其不在目录中发送并且名称相同,它到file_name.something。目前,我正在获取一些文件,并且具有相同名称的文件正在被覆盖…任何人都可以提出建议吗? 问题答案: 您将哈希与文件名进行比较。你需要类似的东西 计算目标文件夹中每个文件的哈希值。 此外,在当前版本中,您的

  • 本文向大家介绍Java如何在不存在文件夹的目录下创建文件,包括了Java如何在不存在文件夹的目录下创建文件的使用技巧和注意事项,需要的朋友参考一下 核心代码如下所示: 1、 2、 总结 以上所述是小编给大家介绍的Java如何在不存在文件夹的目录下创建文件,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对呐喊教程网站的支持!

  • 我已经用Eclipse创建了一个可运行的jar。在我的项目中,我有一个叫做问卷的文件夹,里面有一些我使用的文本文件。当我运行我的可运行jar时,它不起作用,除非我在与jar相同的文件夹中有文件夹调查表。我尝试了一些我在stackoverflow中读到的解决方案,比如将文件夹调查表添加为源文件夹,也可以从Properties->java build path->Libraries->add clas