首页 > 解决方案 > 将列表中的每个项目写入具有自动分配文件名的单独 txt 文件(python = 3.6)

问题描述

我正在使用 textract 从 PDF 文件中获取纯文本。对于目录中每个 PDF 文件的纯文本,我将其附加到列表中filetext_list。我想将列表中的每个项目写入一个单独的 txt 文件,并使用自动分配的文件名,如“article_1”。这是我到目前为止所做的:

import textract
import os
filetext_list = []
directory=os.getcwd()
for file in os.listdir(directory):
    txt = textract.process(file, method = 'pdfminer')
    filetext_list.append(txt)
    for i in range(2):
        for filetext in filetext_list:    
            with open('artile_{0}.txt'.format(i),'w') as f:
                f.write(str(filetext))
        f.close()

输出文件是正确命名的“article_0”和“article_1”。但是,这两个文件都包含列表中相同项目的文本。我希望它们每个都包含列表中单独项目的文本。知道为什么代码失败了吗?另外,我想通过执行类似的操作来消除文本中的“\n”元素.replace('\n', ' '),但我不知道这适合代码的什么位置。谢谢!

标签: python-3.xtext-miningtext-processingtext-extractionpdfminer

解决方案


你到底想做什么?我想我可能误会你了。

最终结果基本上是您想将每个pdf转换为txt文件对吗?

import textract
import os
filetext_list = []
directory=os.getcwd()

for file in os.listdir(directory):
     txt = textract.process(file, method = 'pdfminer')
     filetext_list.append(txt)

for index, text in enumerate(filetext_list) :
     with open('article_{0}.txt'.format(index),'w') as f:
          f.write(str(text).replace("\n",""))

因此,如果您的目录内容是 [thing1.pdf, thing2.pdf, thing3.pdf] 那么您生成的新文件将是 article_0(带有 thing1.pdf 的内容)、article_1(带有 thing2.pdf 的内容)、article_2(带有内容thing3.pdf)

我不确定如何向您指出异步代码出错的地方。但是你最好重新开始思考这个问题,而不是尝试继续使用你目前拥有的逻辑。

每个新的“打开”加上写入都会覆盖原始文件。

所以你得到的是 article_0 和 article_1 以及目录中文件列表中最后一个 pdf 的内容。

您的“range(2)”循环也会为您目录中的每个文件调用一次,因此 article_0 的内容看起来像“第一个文件的内容,然后是第一个文件的内容,然后是第二个文件的内容文件,然后是第一个文件的内容,然后是第二个文件的内容,然后是第三个文件,然后是 1st -> 2nd -> 3rd -> 4th。以此类推。

此外,如果您执行“打开”,则无需关闭文件。它会自动关闭。


推荐阅读