在python中,可以这样做:
print("foo bar", end="\n")
但不是:
with open("foo.txt","w") as fout:
fout.write("foo bar", end="\n")
并且必须这样做:
with open("foo.txt","w") as fout:
fout.write("foo bar"+"\n")
有原因吗?这是否有PEP?
答案 0 :(得分:6)
这与文件i / o没有任何关系;您可以使用print()
打印到文件:
print("foo bar", end="\n", file=fout)
文件对象的.write()
方法只是将内容写入文件,它不会写入行。另一方面,print()
默认打印一行输出。当你想要打印不是整行的东西时,它需要end
这些情况的参数;没有它,它无法完全取代Python 2的print
语句,其中包括省略默认换行符的语法。
没有PEP关于不向end
添加.write()
参数,因为写一个PEP来保存一个方法,它在最早的Python版本中已经没有任何意义......
答案 1 :(得分:3)
原因很简单,写入文件的api仅用于写入字节,不一定是"行"。并非您写入文件的所有内容都是文本,或者应该作为文本行处理。
从这个意义上说,当您不需要end=
或明确说明end=''
时,您需要找到解决方法。
在print()
函数的情况下,您经常写入stdout,其中大部分时间是行的概念有效的终端。
然而,没有什么可以阻止您使用print()
使用file=
参数来写入文件。