为什么 python-docx?

Why python-docx?

import docx
import collections
listofnames = list()
filename = 'Missing_Assignments.docx'
filehandle = docx.Document(filename)
studentinfo = filehandle.paragraphs

for student in studentinfo: 
    if len(student.text) > 1 or len(student.text) > 20:
        listofnames.append(student.text)

for name in listofnames: 
    if name.startswith('Assignment'):
        listofnames.remove(name)
    

counts = collections.Counter(listofnames)
counts = dict(counts)

filehandle.add_paragraph('\n')

for name,count in counts.items(): 
    filehandle.add_paragraph(name + ' ' + str(count))
    filehandle.save(filename)

print('Complete!')

更多 learning/efficiency 问题...如果这通常被认为不合适,请让我知道哪些论坛可能更合适。

  1. 问题是,为什么我必须使用 docx?我习惯于创建一个简单的句柄,例如:

    文件句柄 = 打开(文件名)

并且能够以这种方式遍历文件。在使用 python-docx 库之前,我收到了各种 UNICODE 错误。只是看起来稍微复杂一些,因为我必须使用他们的措辞,而不是像往常一样直接遍历每一行文本。

  1. 另外,有谁知道中断这里显示的计数功能的方法吗?我想计算一个名字出现在各种缺失作业中的次数,但仅限于那个时期。其他时期可能有同名学生,所以这会使计数复杂化吗?

docx 文件实际上是一个 zip 文件。尝试将其重命名为 xyz.zip 并解压缩。您会在多个文件夹中找到多个文件,其中大部分是 XML 个文件。这些 XML 文件具有特定格式,由 MS 为 docx 文件创建。

您可以尝试直接用 python(或您想要的任何语言)完成所有这些操作,包括所有 XML 属性和元素的含义以及不同文件之间的相互关系,或者你可以使用一个已经知道的库。

关于你的第二个问题,你没有提供任何让我猜测的数据,所以我不会。

当你有 docx 文件时,你应该使用 python-docx。

您可以打开一个简单句柄来解析纯文本文件,但docx不是纯文本格式。

它实际上是一个包含 XML 个文件的 ZIP 压缩包。您可以在此处阅读更多相关信息:https://docs.fileformat.com/word-processing/docx/

您可以为此创建自己的解析器,该标准实际上是开放的,但存在互操作性问题。您可以在这里阅读更多相关信息:https://brattahlid.wordpress.com/2012/05/08/is-docx-really-an-open-standard/

总而言之,python-docx 为您减轻了解析文件格式的负担。