【问题标题】:Python adds a new line at the end of opened filePython 在打开的文件末尾添加一个新行
【发布时间】:2018-09-21 13:56:32
【问题描述】:

在编写一些测试时,我遇到了一些奇怪的行为。我终于将问题缩小到文件打开。比如这个my.dat

one line
two lines and no final line break

然后我运行了那个 python 代码:

with open('my.dat') as fd:
    assert fd.read()[-1] == '\n'

对于 python 3 和 2,此代码不会引发任何 AssertError。

我的问题是:为什么要强制在文件末尾出现换行?

【问题讨论】:

  • 如果你不写文件,你应该用mode='r'打开文件。

标签: python file newline


【解决方案1】:

它在这里工作。您是否 100% 确定文件末尾实际上没有换行符?因为许多文本编辑器(atom、notepad++)会自动在文件末尾添加换行符。

>>> open('a.txt', 'w').write('blabla')
6
>>> open('a.txt', 'r').read()
'blabla'
>>> assert open('a.txt', 'r').read()[-1] == '\n'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AssertionError

【讨论】:

  • Scheiße... 我的 vim 似乎被这种行为污染了。现在的问题都是关于 vim 的。这是一个情节转折。谢谢 ! (fixed)
  • 这是 posix 标准的文件编写方式。 Vim 实际上会在打开没有换行符的文件时警告你(它在底部显示 NOEOL),但是当它写出文件时,它会添加缺少的换行符。 stackoverflow.com/questions/729692/…
  • 像往常一样,我发现了一个奇怪的行为,为此生气了十分钟,然后 SO 的社区改变了我的想法。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-06
  • 2017-10-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多