使用自动分配的文件名将列表中的每个项目写入单独的 txt 文件 (python=3.6)

Wrting each item in a list into a separate txt file with auto-assigned filename (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",它们的命名正确。但是,这两个文件都包含列表中相同项目的文本。我希望它们每个都包含列表中一个单独项目的文本。知道为什么代码失败了吗?此外,我想通过执行 .replace('\n', ' ') 之类的操作来消除文本中的“\n”元素,但我不知道这适合代码中的什么位置。谢谢!

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

最终的结果基本上是你想把每个 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 的内容)

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

每个新 "open" 加上写入都会覆盖原始文件。

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

你的 "range(2)" 循环也会为目录中的每个文件调用一次,所以 article_0 的内容看起来像“第一个文件的内容,然后是第一个文件的内容再次,然后是第二个文件的内容,然后是第一个文件的内容,然后是第二个文件的内容,然后是第三个文件,然后是第一个 -> 第二个 -> 第三个 -> 第四个。依此类推。

此外,如果您这样做 "with open",则无需关闭文件。它会自动关闭 afaik。