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



我正在使用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', ' ')的操作来消除文本中的""元素,但我不知道这在代码中的位置。谢谢!

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

最终结果基本上是您想将每个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

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

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

因此,您得到的是目录中文件列表中最后一个pdf的内容article_0和article_1。

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

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

最新更新