为什么python3.x没有`end =“\ n”`for fileIO?

时间:2014-05-07 14:50:09

标签: python python-3.x

在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?

2 个答案:

答案 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=参数来写入文件。