当只有一个print()函数时,Python会打印两次

时间:2018-04-04 07:13:44

标签: python python-3.x

我想知道为什么我的代码打印两个相同的输出,即使我打印过一次。

我试图使用Python中的 python-docx readDocx 模块阅读和编辑.docx文件,这本书来自一本名为Automate with Python的无聊内容的书。 Sweigart。

demo.docx 包含以下简单的6个文本行:

  1. 文件标题
  2. 一个带有一些粗体和一些斜体的简单段落
  3. 标题,第1级
  4. 激烈的报价
  5. 无序列表中的第一项
  6. 有序列表中的第一项
  7. import docx, readDocx
    
    def getText(filename):
        doc = docx.Document(filename)
        fullText = []
        for para in doc.paragraphs:
            fullText.append(' ' + para.text)
        return '\n'.join(fullText)
    
    print(readDocx.getText('demo.docx'))
    

    输出:

    Document Title
    A plain paragraph with some bold and some italic
    Heading, level 1
    Intense quote
    first item in unordered list
    first item in ordered list
    
    
    Document Title
    A plain paragraph with some bold and some italic
    Heading, level 1
    Intense quote
    first item in unordered list
    first item in ordered list
    

    这个文件出现了, enter image description here

    我删除了这个文件,当重新运行程序时,它再次在文件夹名称 pycache

    中创建

2 个答案:

答案 0 :(得分:3)

正如我在评论中提到的,您似乎正在导入正在执行的模块。 https://automatetheboringstuff.com/chapter13/中的代码示例(中间的某个地方)看起来与getText()函数完全相同,并且提到要保存到文件readDocx.py

导入时,将执行导入模块中的所有代码。导入行已经执行了您的文件,包括print()。

请在import语句中没有readDocx的情况下尝试一下,并考虑熟悉前面提到的__name__ == '__main__'

答案 1 :(得分:-1)

我不熟悉docx或readDocx导入,但正如Patrick在评论中提到的那样,您的定义与您在打印行中的调用名称相同。

即: 您已经定义了getText(),但之后将其用作readDocx下的函数。

readDocx的库中是否有getText? 尝试将getText定义的名称更改为其他名称,并尝试使用其他文档来查看是否得到相同的结果。