【问题标题】:DOCX file to text file conversion using Python使用 Python 将 DOCX 文件转换为文本文件
【发布时间】:2019-03-14 03:03:44
【问题描述】:

我编写了以下代码来将我的 docx 文件转换为文本文件。我在文本文件中打印的输出是整个文件的最后一段/部分,而不是完整的内容。代码如下:

from docx import Document
import io
import shutil

def convertDocxToText(path):
    for d in os.listdir(path):
        fileExtension=d.split(".")[-1]
        if fileExtension =="docx":
            docxFilename = path + d
            print(docxFilename)
            document = Document(docxFilename)


# for printing the complete document
            print('\nThe whole content of the document:->>>\n')
            for para in document.paragraphs:
                textFilename = path + d.split(".")[0] + ".txt"
                with io.open(textFilename,"w", encoding="utf-8") as textFile:
                    #textFile.write(unicode(para.text))
                    x=unicode(para.text)
                    print(x) //the complete content gets printed by this line
                    textFile.write((x)) #after writing the content to text file only last paragraph is copied.
                #textFile.write(para.text)

path= "/home/python/resumes/"
convertDocxToText(path)

【问题讨论】:

  • with io.open(textFilename,"w", encoding="utf-8") as textFile: 你的for para in document.paragraphs:循环。这意味着您在每次迭代中以写入模式继续打开文件,擦除任何现有内容。您需要在运行循环之前打开文件一次,即将for 循环放在with 块内,而不是相反。
  • 感谢我进行了更改,并且成功了..
  • @sharayusalunkhe 这个代码目前对你有用吗?,即使更正了,我的代码也会出错,,,

标签: python file-conversion python-docx


【解决方案1】:

以上问题的解决方法如下:

from docx import Document
import io
import shutil
import os

def convertDocxToText(path):
    for d in os.listdir(path):
        fileExtension=d.split(".")[-1]
        if fileExtension =="docx":
            docxFilename = path + d
            print(docxFilename)
            document = Document(docxFilename)
            textFilename = path + d.split(".")[0] + ".txt"
            with io.open(textFilename,"w", encoding="utf-8") as textFile:
                for para in document.paragraphs: 
                    textFile.write(unicode(para.text))

path= "/home/python/resumes/"
convertDocxToText(path)

【讨论】:

    【解决方案2】:

    问题

    正如您的代码在最后一个 for 循环中所说:

            for para in document.paragraphs:
                textFilename = path + d.split(".")[0] + ".txt"
                with io.open(textFilename,"w", encoding="utf-8") as textFile:
                    x=unicode(para.text)
                    textFile.write((x))
    

    对于整个文档中的每个段落,您尝试打开一个名为 textFilename 的文件,假设您在 /home/python/resumes/ 中有一个名为 MyFile.docx 的文件,因此包含路径的 textFilename 值将是 /home/python/resumes/MyFile.txt总是在整个for 循环中,所以问题是你在w 模式下打开同一个文件,这是Write 模式,并且会覆盖整个文件内容。

    解决办法:

    您必须在 for 循环之外打开文件一次,然后尝试将段落一个接一个地添加到其中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-07
      • 1970-01-01
      • 2020-04-18
      • 2021-10-03
      • 2015-09-13
      • 2011-10-03
      相关资源
      最近更新 更多