【问题标题】:how to generate py files without default windows crlf?如何在没有默认 windows crlf 的情况下生成 py 文件?
【发布时间】:2011-02-13 19:09:29
【问题描述】:

如何从 python 编写一个 .py 文件,使其类型不应该像“带有 Windows CRLF 的 ASCII 文件”

因为当我在 Windows 内运行 file.write(data) 时,它会写入文件,但是当我尝试 eval(open(file.py).read()) 由于每行都有 windows CRLF,它失败并给出语法错误......

查看错误日志 - 回溯

ERROR:web-services:[25]:     info = eval(tools.file_open(terp_file).read(-1))
ERROR:web-services:[26]:   File "<string>", line 1
ERROR:web-services:[27]:     {
ERROR:web-services:[28]:

【问题讨论】:

  • 你想做什么?为什么?
  • 也许你可以看看rstrip函数。
  • @SilentGhost 我相信他正在尝试编写代码生成工具(因此标签)。
  • 是的,你说得对,它是一个代码生成器工具,我只是在其中编写字典 {"name":"Hello"} 它适用于 linux 但不适用于 windows :(

标签: python code-generation eval


【解决方案1】:

你可以:

  1. 使用open(file, 'wb') 或...打开文件以二进制模式写入文件...
  2. 在使用data.replace('\r','') 之类的内容写入之前,从字符串中剥离 CR-LF

我会避开exec 并使用execfile as mentioned by SilentGhost

【讨论】:

  • 谢谢 D.Shawley 我不知道为什么,但它适用于 'wb' 它,它也应该适用于 'w' - 无论如何感谢您的即时帮助!
  • @shahjapan - 有一个很好的 Wikipedia 链接 (en.wikipedia.org/wiki/Newline#In_programming_languages) 描述了 “二进制模式”“文本模式” 之间的区别.
【解决方案2】:

问题不在于 CRLF,而在于 eval 用于评估单个表达式,而不是整个程序。

您可以使用exec 从字符串执行程序,或使用execfile 直接从文件执行。

无论如何,要回答您的原始问题,您可以通过以二进制模式打开文件来避免编写 CRLF:f = open(filename, 'wb')

【讨论】:

    【解决方案3】:

    我认为您正在寻找execfile 函数。

    【讨论】:

      【解决方案4】:

      只需以二进制模式打开文件:open("myfile.py", "rwb")

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-04-20
        • 2015-01-04
        • 1970-01-01
        • 1970-01-01
        • 2021-11-07
        • 1970-01-01
        • 2023-03-19
        相关资源
        最近更新 更多