【问题标题】:Writing to non ".txt" files Python写入非“.txt”文件Python
【发布时间】:2012-03-07 22:21:46
【问题描述】:

我正在用 Python 编写一个程序,您可以从该程序远程写入文本文件。相关代码:

namein = input("What do you want the filename to be? Don't include an extension...\n")
extin = input("What would you like the extension to be? This program supports:\nMicrosoft Word Document: '.docx'\nPlain Text File: '.txt'\nRich Text File: '.rtf'\nPages Document: '.pages'\n")
aw = input("Do you want to append your text file, or rewrite the whole thing? (append/write) ")
if aw == 'append':
    textin = input("In the line below, write the text you want to put into your text document!\n\n")
    outfile = open(namein + extin, 'a')
    outfile.write(textin)
    outfile.flush()
    print("Great! Now your text file has been updated!")
    print("Your text file:\n")
    outfile.close()
    outfile = open(namein + extin, 'r')
    print(outfile.read())

当有人选择非“.txt”文件时,无法打开该文件!它只是说错误,文件无法打开。有没有办法解决这个问题?

【问题讨论】:

  • 你让人们在服务器文件系统的任何地方创建任意文件?
  • 是的,您需要以正确的输出格式将数据写入文件。
  • @sdolan: "远程" :) 我喜欢。
  • 请给我们完整的错误信息。 “它”是什么?
  • @Karoly:我的猜测是当纯文本文件以.doc.pdf 打开时,文件处理程序会显示错误...

标签: python file text-files


【解决方案1】:

你的代码是低音。 您应该询问他们要将文本保存为哪种文件并基于此设置扩展名。 他们必须把点放在里面也不好......

在那之后,您将可以使用 rtf 扩展名或 doc 保存纯文本。 DocX 和 pdf 将无法正常工作。您需要创建该类型的文档,然后将文本添加为​​内容。

【讨论】:

    【解决方案2】:

    从您的代码看来,“textin”包含常规文本,您可能会从键盘读取这些文本。你不能那样创建 Word 文档:Word 文档包含标题、字体信息等,因此你需要为每种文档浏览一个库。例如,要编写 Excel 电子表格,您可以使用 xlwt python 模块。对于 Word 文档,请参阅this SO question一个用于 RTF 文件的 Python 库,pyrtf

    这是你在做什么还是我误解了你的简化代码?

    PS。不要启用任何允许陌生人在您的服务器上写入文件的 Web 界面,例如,至少一年。有一些方法可以相当安全地做到这一点,但我相信你还没有准备好。 (请参阅其他 cmets 以了解您会遇到什么样的麻烦)。

    【讨论】:

    • 对于 pyrtf,我只需要 import pyrtf 就可以神奇地工作吗?
    • @user1247509:不,与所有库一样,您需要查看文档并研究 API,然后稍作修改并将其集成到您的代码中。
    • 简而言之:它们提供将为您生成文本的命令。会很复杂。我的建议是试试这个:使用 Word 创建一个包含一个单词的文档:“你好”。保存并使用记事本打开文档。这是你需要创造的东西。我的建议是将二进制格式搁置几个月,然后先处理其他内容。
    【解决方案3】:

    我想(但我只是猜测,因为我不经常使用 Windows)其他格式被视为二进制文件。在这种情况下,您需要以二进制文件的形式打开:

    outfile = open(namein + extin, 'ab')
    

    但是,我想 可能 限制附加到二进制文件...? [显然不是 - 谢谢亚历克西斯]。另外,正如每个人都指出的那样:如果它们是二进制文件,那么这不太可能有什么好处。

    更笼统地说,我只想说,尽管你在这里读到了什么,但这就是我们所有人的学习方式。通过到处玩耍和做事,搞砸并学习不该做的事情。我发现 Niklas 比你更聪明、贬低你的风格特别令人讨厌。他可能不承认,但即使是他也曾经写过一些愚蠢的小程序,而且——震惊——不知道所有的答案。保持学习。你的程序很酷。如果它是完美的,你会学到什么?

    【讨论】:

    • 那么,您是说仅包含纯文本的.docx.rtf 将按预期工作?我真的很怀疑。
    • 是的,但这似乎是 OP 所期望的,而且您没有描述这绝对不是这种情况,以及如何以二进制模式打开文件根本无济于事。跨度>
    • 您可以自己发布更好的答案,您知道。就个人而言,我认为大多数人都是逐步学习的。但是,如果您想炫耀并将您的知识推到每个人的喉咙里,那就去吧。真的,我不会阻止你。
    • 附加到二进制文件没有限制。追加就是追加。
    • 他似乎没有任何结构,这才是真正的问题:-)
    猜你喜欢
    • 1970-01-01
    • 2011-05-06
    • 1970-01-01
    • 2016-08-17
    • 2020-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多