【问题标题】:Python2 writelines() called with stringPython2 writelines() 用字符串调用
【发布时间】:2018-05-21 09:53:47
【问题描述】:

当我在 Python2 和 Python3 中都使用 f.writelines('aaa') 时,字符串 aaa 被写入文件,但我期望的是 a 的三个单独的行。

这里是writelines的文档:

writelines(sequence_of_strings) -> None.  Write the strings to the file.

Note that newlines are not added.  The sequence can be any iterable object 
producing strings. This is equivalent to calling write() for each string.

请注意它接受任何可迭代且str 可迭代的,那么为什么writelines() 不为字符串中的每个项目写一行,而是只写一个字符串?

我是否需要使用f.writelines(list('aaa')) 才能获得想要的结果?

我想知道这是故意考虑还是只是一个新错误。

【问题讨论】:

  • 您的分析和期望假设writelines 在给定的字符串上调用list(...),不是吗?
  • 虽然问题本身并不完全重复,但您可能会发现这个答案很有趣:stackoverflow.com/a/12377575/1453822
  • 请注意,没有添加换行符。这能告诉你什么吗?
  • @DeepSpace 是的。
  • @DeepSpace 哦,我知道了。 3 a 没有换行符只是aaa

标签: python


【解决方案1】:

来自documentation

writelines(lines)

将行列表写入流。不添加行分隔符,所以 通常提供的每一行都有一个行分隔符 结束。

例子:

with open('test.txt', 'w') as f:
    f.writelines(['a\n','a\n','a\n'])

输出:

a
a
a

请注意,行分隔符\n 是每个字符串的一部分。

【讨论】:

  • f.writelines('a\na\na') 的输出是什么?
  • @DeepSpace 你可能在发表评论之前就知道答案了,我也这样做了/...输出将是相同的,也将与f.write('a\na\na') 相同。或者我应该说“类似”,因为您的示例没有\n(我在此评论中的示例也没有),所以从技术上讲,我的答案中的代码最后还有 1 个\n
  • 你为什么要这样做?如果字符串中有换行符,则只需使用 f.write 编写字符串。
  • @SeanBreckenridge ... 你这样问是对的,老实说我不会,我只是在回答不包括行分隔符的 OP 问题,而文档明确指出.writelines() 没有添加它们,因此这个答案。
  • @SeanBreckenridge 这整个问题都是假设性的,我的观点也是如此
猜你喜欢
  • 2012-09-04
  • 2019-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多