将行写入文件的正确方法?
|
我习惯做
print >>f, \"hi there\"
但是,似乎ѭ1已经过时了。推荐使用哪种方法进行上述操作?
更新:
关于所有带有\"\\n\"
的答案...这是通用的还是Unix专用的? IE,我应该在Windows上执行\"\\r\\n\"
吗?
没有找到相关结果
已邀请:
13 个回复
糕泰灌
从文档: 写入以文本模式打开的文件时(默认),请勿将“ 5”用作行终止符;在所有平台上都使用一个\'\\ n \'代替。 一些有用的读物:
陈述
\'a \'用于追加或使用 \'w \'截断书写
(尤其是
)
昧伎
函数,该函数自Python 2.6+起可用
对于Python 3,您不需要
,因为默认情况下是
函数。 替代方法是使用:
引用Python文档中有关换行符的内容: 在输出中,如果换行符为None,则写入的所有
字符都会转换为系统默认的行分隔符
。如果换行符是
,则不会进行翻译。如果换行符是其他任何合法值,则将写入的所有“ 15”个字符转换为给定的字符串。
蹄寄噬非芹
所以这就是我通常的方式:) 来自docs.python.org的声明: 在处理文件时,最好使用\'with \'关键字 对象。这样做的好处是,文件在关闭后会正确关闭 即使在途中引发异常,其套件也会完成。它是 比编写等效的try-finally块还短得多。
盛梯獭八搽
在Windows上: 不出所料,os.linesep不会产生与
相同的结果。它不可能产生相同的结果。
等同于
,但不等同于
。 就是这么简单:使用
,它将自动翻译为os.linesep。自从将Python首次移植到Windows以来,事情就变得如此简单。 在非Windows系统上使用os.linesep是没有意义的,并且在Windows上会产生错误的结果。 请勿使用os.linesep!
埃输林桨铃
纪念蒂姆·托迪(Tim Toady)。
澳绍能
那你做
抢垢洛韧
平均
在我的机器上以2.45s完成,而
花费的时间大约是(9.76s)的4倍。话虽这么说,在大多数现实情况下这都不是问题。 如果您选择使用ѭ30go,则可能会发现您可能会不希望取消换行符,或将其替换为其他内容。这可以通过设置可选的
参数来完成,例如;
无论您选择哪种方式,我建议使用
,因为它使代码更易于阅读。 更新:性能上的这种差异可以通过以下事实来解释:
被高度缓冲并在实际对磁盘进行任何写操作之前返回(请参见此答案),而
(可能)使用行缓冲。一个简单的测试就是检查长写的性能,因为行缓冲的缺点(在速度方面)不太明显。
现在,性能差异变得不那么明显了,
的平均时间为2.20s,
的平均时间为3.10s。如果您需要连接一串字符串才能获得这种良好的性能,那么
效率更高的用例就很少见了。
扦帽次杏
秃拳割
在追加模式下,每次写入光标后移至新行,如果要使用\'w \'模式,则应在write()函数末尾添加\'\\ n \'字符:
孝箱捆讨
模块,如下所示:
逝媳蘑贩茄
写入
接受具有
支持的可迭代对象或对象。
嫩昧竞莫
函数的lambda:
这种方法的好处是可以利用
功能提供的所有功能。 更新:正如Georgy在评论部分中提到的那样,可以通过
函数进一步改善此想法:
恕我直言,这是一种功能更强,含糊不清的方法。
玩翁文醚碱