首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将代码应用于一个目录中的多个文件以及该目录中具有相同文档名的输出文件?

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

Stack Overflow用户
提问于 2017-02-16 00:07:02
回答 2查看 1K关注 0票数 0

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

示例:目录X包含'name1.pdf‘、'name2.pdf’和'name3.pdf‘

我想要做的是从这些文件中提取文本,并将它们放入名为'name1.txt‘、'name2.txt’和'name3.txt‘的文件中。

到目前为止,我所拥有的:

代码语言:javascript
复制
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)

提前感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-16 00:13:42

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

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

基本上,你需要的是:

代码语言:javascript
复制
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将每个pdf写入txt文件,以获得基本名称。

票数 0
EN

Stack Overflow用户

发布于 2017-02-16 00:22:10

所以我希望我对你的理解是正确的,如果我是的话,这应该会有所帮助。

代码语言:javascript
复制
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参数中提供文件名

代码语言:javascript
复制
walk_directories("C:\\Example folder", "Example File.pdf") # or simply "pdf1" etc..

您将注意到,此函数返回一个变量,在本例中,该变量是您正在使用的完整文件路径。

代码语言:javascript
复制
_path = walk_directories("C:\\example folder", "example file.pdf")

然后,_path将包含

代码语言:javascript
复制
C:\\example folder\\example file.pdf

所以你可以像这样

代码语言:javascript
复制
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“参数将是temp返回的结果变量( _path )将是包含在文件中的文本。

代码语言:javascript
复制
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

因此,这里非常简单,提供路径和包含您想要编写的文本的变量。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42254418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档