将换行符添加到字符串中,跨平台

21

我在我的应用程序中生成一些文本。由于该文本是更大信息的一部分,有时我需要添加换行符,有时不需要:

NEWLINE = '\n'  # TODO: how to define this cross-platform? Can I use os.linesep?

def get_txt(add_newline=False):
    txt = 'Hello'
    if add_newline:
        txt += NEWLINE
    return txt

这可以按照以下方式使用:

def get_message():
    msg = get_txt(True)
    msg += get_txt(True)
    msg += get_txt(False)
    return msg

会返回:

Hello
Hello
Hello (no newline here)

如何以跨平台的方式定义NEWLINE?或者更好的方法是,标准库中(或Python中包含的)是否有函数可以向字符串附加换行符?(不一定在打印时添加,只需将换行符附加到内存中的字符串即可)。所使用的换行符应该是Python运行所在平台的正确换行符。


1
你在代码注释中提到的 os.linesep 试过了吗? - Iron Fist
那么...这应该回答了问题...不是吗? 这是你不需要关心的实现细节。根据你所写的文件所在的平台,Python 会确保以适当的行结束符结束该行。 - Iron Fist
@IronFist:不,它不会。如何以跨平台的方式在内存中构建带有换行符分隔符的字符串?我应该在所有平台上使用\n吗?我想我的根本问题是:在内存中的换行符分隔符在Windows和Linux上是否不同,或者这种差异仅存在于IO支持的数据(文件和终端)上? - blueFast
阅读该链接后,我认为你应该只使用'\n',如果有必要(例如写入文件),Python会在Windows上处理转换。 - James Kent
我可以确认在我的Windows机器上,如果我只使用'\n'在内存中构建一个字符串,然后将其写入文件,Python确实会替换它(通过十六进制编辑器进行了检查),而且我从未在任何其他库中使用简单的换行符遇到过任何问题... - James Kent
显示剩余4条评论
4个回答

31

你可以尝试这个:

import os
print(os.linesep)

16

我一直只用换行符'\n'表示换行,虽然Windows使用换行和回车符,但我在我的Windows机器上测试了一下(Python 3.4),先在内存中建立一个字符串,然后将其写入文件,在内存中它保持为单个字符('\n'),但当写入文件时,它会转换为两个字符以获得正确的Windows换行符。
到目前为止,我还没有遇到过任何一个库对此有问题。


2

Python使用\n来表示换行。

Python会根据平台自动将\n转换为正确的换行符。

您也可以尝试

import os
print (os.linesep)

0

你需要打印你的信息以使其显示为新行。

get_txt()
msg = get_message()
print(msg)

会给你:

Hello
Hello
Hello

只需要确保将内容打印到文件中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接