在写入文件时,如何在Python中指定换行符?


313

与Java(以字符串形式)相比,您可以执行"First Line\r\nSecond Line"

那么,为了在常规文件中写多行,您将如何在Python中执行此操作?


12
你尝试了什么?奏效了吗?(我想不是,否则您不会问。)发生了什么事?
格雷格(Greg Hewgill)

我只是想知道是否有对与错的方法来做,但是我还没有尝试过。
FabianCook 2012年

5
您确实意识到Python的print工作原理类似于System.out.printlnJava,并在文本后自动添加了换行符,对吗?
格雷格(Greg Hewgill)

我想要它来写文件:)
FabianCook

2
printPython中的语句也可以用于写入文件(Python 2.x和Python 3.x之间的详细信息有所不同,因此请查看您所用版本的参考文档)。print在Python 2.x中 - print在Python 3.x中
Greg Hewgill 2012年

Answers:


357

这取决于您想做的正确程度。\n通常会做的工作。如果您确实想解决问题,请在os包中查找换行符。(实际上称为linesep。)

注意:使用Python API写入文件时,请勿使用os.linesep。随便用\n; Python会自动将其转换为适合您平台的换行符。


14
从链接中,您提供了“在编写以文本模式打开的文件时,不要使用os.linesep作为行终止符(默认);在所有平台上,请使用单个'\ n'。” 那么,您所说的“正确”是什么意思?发表这些评论的原因是什么?
Yasen 2014年

21
@Yasen:在Windows上,换行顺序为"\r\n"。这意味着os.linesep将会"\r\n"。当您以文本模式写入文件时,它会在写入时进行换行翻译。也就是说,"\n"输出中的每个都将转换为"\r\n"结果文件。如果您正在编写的文本已经包含"\r\n"序列,您可以看到这是一个问题:结果将"\r\r\n"在每一行的末尾。我至少认为:我实际上没有尝试过。
Nate CK 2015年

可能是时候已经解决了答案并删除了错误的os.linesep建议,不是吗?这不会是一场大戏,我相信作者的骄傲不会受到太大影响
ZAB

8
你不知道我的骄傲。但更重要的是,我认为有必要指出其中linesep是否存在是很有用的,这样您就可以找出系统行分隔符是什么。
查理·马丁

2
@ZAB并非所有字符串都以文本模式写入文件。linesep仍然有用。
凯尔·斯特兰德

61

新行字符为\n。它在字符串内使用。

例:

    print('First line \n Second line') 

\n换行符在哪里。

这将产生结果:

First line
 Second line

如果使用Python 2,则不要在print函数上使用括号。


7
就像一个建议一样,如果我们在\ n后不给“空白”,则第二行中不会出现一个空格缩进。我的意思是:打印“第一行\第二行”
Manoj Kumar

感谢您指出要在字符串中使用转义的“ \ n” char!对于像我这样的Python新手来说,也许并不明显
GrayedFox 2016年

3
@ all / anyone / ManojKumar a = 1; b = 2; 打印(a,“ \ n”,b); o / p:1 2(2在新行上带有一个空格缩进,它看起来不正确,但假设1和2在单独的行上,一个空格缩进于2)在这种情况下,我将如何删除whilte空间(一个空格缩进)在2之前,并将缩进1。注意:我们将不使用2打印语句,并且1和2将在单独的(新)行上。
PRAFUL ANAND

24

您可以分别在新行中编写,也可以在单个字符串中编写,这样更容易。

例子1

输入项

line1 = "hello how are you"
line2 = "I am testing the new line escape sequence"
line3 = "this seems to work"

您可以单独编写“ \ n”:

file.write(line1)
file.write("\n")
file.write(line2)
file.write("\n")
file.write(line3)
file.write("\n")

输出量

hello how are you
I am testing the new line escape sequence
this seems to work

例子2

输入项

正如其他人在前面的答案中指出的那样,将\ n放在字符串中的相关点上:

line = "hello how are you\nI am testing the new line escape sequence\nthis seems to work"

file.write(line)

输出量

hello how are you
I am testing the new line escape sequence
this seems to work

我认为您的输出在技术上是不正确的。第二和第三行应在其第一个字符的左侧打印一个空格。另一个解决方案是从line变量中删除这两个空格。
克里斯蒂安·威斯布鲁克

无论如何,示例二中的代码不会产生您所显示的确切输出。
克里斯蒂安·威斯布鲁克

10

如果您一次输入多行文本,我发现这是最易读的格式。

file.write("\
Life's but a walking shadow, a poor player\n\
That struts and frets his hour upon the stage\n\
And then is heard no more: it is a tale\n\
Told by an idiot, full of sound and fury,\n\
Signifying nothing.\n\
")

每行末尾的\将转义新行(这将导致错误)。


您的内部括号,因此不必转义行。只需结束字符串,移至新行,然后开始新的一行即可。不会再有其他任何新行,您也无需逃脱。此外,即使您确实做了上述操作,换行符和转义符也相互抵消。
user144153 '19

9

在Python中,您只能使用换行符,即 \n


3
@maazza:这不是写作的问题吗?
mhawke

9

最简单的解决方案

如果仅print不带任何参数的情况下调用,它将输出空白行。

print

您可以将输出通过管道传输到这样的文件中(考虑您的示例):

f = open('out.txt', 'w')
print 'First line' >> f
print >> f
print 'Second line' >> f
f.close()

它不仅与操作系统无关(甚至无需使用os软件包),而且比放在\n字符串中更具可读性。

说明

print()函数在字符串的末尾有一个可选的关键字参数,称为end,默认为OS的换行符,例如。\n。因此,当您打电话时print('hello'),Python实际上正在打印'hello' + '\n'。这意味着当您print不带任何参数调用时,它实际上是print '' + '\n',这导致换行符。

另类

使用多行字符串。

s = """First line
    Second line
    Third line"""
f = open('out.txt', 'w')
print s >> f
f.close()

6

独立于平台的断线器:Linux,Windows和IOS

import os
keyword = 'physical'+ os.linesep + 'distancing'
print(keyword)

输出:

physical
distancing

4

与相同的方法'\n',尽管您可能不需要'\r'。您是否有理由在Java版本中使用它?如果确实需要/想要它,您也可以在Python中以相同的方式使用它。


1
\r是回车,当您获得换行的系统属性时,它显示为\r\n
FabianCook

4
@SmartLemon:在Windows上可能是这样,但是在大多数其他系统上,这\n是唯一的换行符。
格雷格(Greg Hewgill)

@Jean-MichaëlCelerier:在Mac OS X之前是这样。MacOS X使用\n
Greg Hewgill

好的,我将删除我的评论,那真的没用。抱歉!
吉恩-迈克尔Celerier

4

\ n-简单的换行符插入工程:

# Here's the test example - string with newline char:
In [36]: test_line = "Hi!!!\n testing first line.. \n testing second line.. \n and third line....."

# Output:
In [37]: print(test_line)

Hi!!!
 testing first line..
 testing second line..
 and third line.....

2

Java字符串文字中的大多数转义字符在Python中也有效,例如“ \ r”和“ \ n”。


因为Python和Java受C的影响,并且是从这种语言来的。有关更多信息
Alex.K.

1

如其他答案所述:“换行符为\ n。它在字符串内使用”。

我发现最简单易读的方法是使用“格式”功能,将nl用作新行的名称,然后将要打印的字符串分解为要打印的确切格式:

print("line1{nl}"
      "line2{nl}"
      "line3".format(nl="\n"))

将会输出:

line1
line2
line3

这样,它可以执行任务,并且还可以使代码具有较高的可读性:)


0

\ n分隔字符串的行。在下面的示例中,我将循环写记录。每个记录用分隔\n

f = open("jsonFile.txt", "w")

for row_index in range(2, sheet.nrows):

  mydict1 = {
    "PowerMeterId" : row_index + 1,
    "Service": "Electricity",
    "Building": "JTC FoodHub",
    "Floor": str(Floor),
    "Location": Location,
    "ReportType": "Electricity",
    "System": System,
    "SubSystem": "",
    "Incomer": "",
    "Category": "",
    "DisplayName": DisplayName,
    "Description": Description,
    "Tag": tag,
    "IsActive": 1,
    "DataProviderType": int(0),
    "DataTable": ""
  }
  mydict1.pop("_id", None)
  f.write(str(mydict1) + '\n')

f.close()

0

值得注意的是,当您使用交互式python shell或Jupyter笔记本检查字符串时,\n以及其他反斜杠字符串将按字面\t呈现:

>>> gotcha = 'Here is some random message...'
>>> gotcha += '\nAdditional content:\n\t{}'.format('Yet even more great stuff!')
>>> gotcha
'Here is some random message...\nAdditional content:\n\tYet even more great stuff!'

换行符,制表符和其他特殊的非打印字符仅在打印或写入文件时才呈现为空白:

>>> print('{}'.format(gotcha))
Here is some random message...
Additional content:
    Yet even more great stuff!
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.