当前位置: 代码迷 >> python >> 如何将代码应用于目录中的多个文件以及目录中具有相同文档名称的输出文件?
  详细解决方案

如何将代码应用于目录中的多个文件以及目录中具有相同文档名称的输出文件?

热度:23   发布时间:2023-06-16 10:07:53.0

我有一个包含pdf文件的目录,我想从中提取文本(每个文件分别),并将它们放入与原始pdf文件同名的单个.txt文件中。

示例:目录X包含“ name1.pdf”,“ name2.pdf”和“ name3.pdf”

我要做的是从这些文件中提取文本,并将其放入名为“ name1.txt”,“ name2.txt”和“ name3.txt”的文件中

到目前为止,我有:

import textract
import glob

for pdf in glob.glob('//home//user//Desktop//X//*.pdf'):
    text = textract.process(pdf)

txtFile = open(...,'w') # confused here
txtFile.write(text)

提前致谢!

因此,我希望我能正确理解您,如果我愿意,这应该会有所帮助。

import fnmatch
import os

def walk_directories(self, Dir, pattern):
        root = Dir
        for root, directories, files in os.walk(Dir):
            for basename in files:
                if fnmatch.fnmatch(basename, pattern):
                    _file_path = os.path.join(root, basename)
        return _file_path

这样做是出于不同的目的,但它也应该满足您的需求,我打算在单个根目录中查找“未知”子目录中包含的文件。 您需要知道的是文件名和根目录(主文件夹),这也将与部分文件名一起使用,基本上,如果您拥有三个分别名为“ pdf1”,“ pdf2”和“ pdf3”的文件,要做的是将其提供给pattern参数。

老实说,如果您知道要使用的目录和文件可以轻松得多,那么这似乎有点过头了,但是这样做很简单。

本质上,您在“ Dir”参数中提供了文件夹路径,在Patter参数中提供了文件名。

walk_directories("C:\\Example folder", "Example File.pdf") # or simply "pdf1" etc..

您会注意到该函数返回一个变量,在这种情况下,该变量是您正在使用的文件的完整文件路径。

_path = walk_directories("C:\\example folder", "example file.pdf")

_path将包含

C:\\example folder\\example file.pdf

所以你可以像

def read(self, path):
        try:
            if os.path.isfile(path):
                with open(path, 'r') as inFile:
                    temp = inFile.read()
        except IOError as exception:
            raise IOError('%s: %s' % (path, exception.strerror))
        return temp

在这种情况下,“ path”参数将是_path,返回的结果变量(临时)将是文件中包含的文本,从那里开始,就像

def write(self, path, text):
        try:
            if os.path.isfile(path):
                return None
            else:
                with open(path, 'w') as outFile:
                    outFile.write(text)
        except IOError as exception:
            raise IOError("%s: %s" % (path, exception.strerror))

        return None

因此,这里也很简单,同时提供了路径和包含要编写文本的变量。

首先,在第一个循环中的每次迭代都覆盖text变量。

您可以使用os.path.basename(path)来获取文件名。

基本上,您需要的是:

import os
for pdf in glob.glob('//home//user//Desktop//X//*.pdf'):
    text = textract.process(pdf)
    with open(os.path.basename(pdf)[:-4] + ".txt", "w") as f: 
         f.write(text) 

您可以在同一循环中执行此操作,以这种方式循环遍历pdf,并使用os lib将每个文件写到txt文件中,以获得基本名称。

  相关解决方案