使用\ r \ n(在VS代码中)进行Python额外的行写操作

时间:2018-11-28 13:56:20

标签: python string file for-loop visual-studio-code

Python的新手,并且正在在线观看视频教程,以使用VS Code学习Python。 以下代码用于生成文本文件:

#
# Read and write files using the built-in Python file methods
#

def main():  
  # Open a file for writing and create it if it doesn't exist
  f = open("textfile.txt", "w+")

  # Open the file for appending text to the end


  # write some lines of data to the file
  for i in range(10):
    f.write("This is line " + str(i) + "\r\n")

  # close the file when done
  f.close()


  # Open the file back up and read the contents


if __name__ == "__main__":
  main()

运行它,我得到:

This is line 0

This is line 1

This is line 2

This is line 3

This is line 4

This is line 5

This is line 6

This is line 7

This is line 8

This is line 9

导师的输出为:

This is line 0
This is line 1
This is line 2
This is line 3
This is line 4
This is line 5
This is line 6
This is line 7
This is line 8
This is line 9

我尝试使用“ \ r \ n”进行实验,当使用其中一个(如“ \ r”或“ \ n”)时,我得到了正确的响应,但同时使用它们,结果是多余的行。

我已经读到某个地方说Windows和Mac在这方面有区别,但是我找不到关于这些字符是什么以及它们做什么的全部细节。

编辑:我正在使用Windows,教师正在使用Mac

3 个答案:

答案 0 :(得分:4)

  

换行符控制通用换行符的工作方式(仅适用于文本   模式)。可以是“无”,“”,“ \ n”,“ \ r”和“ \ r \ n”。它作为   如下:

     

在输入时,如果换行符为“无”,则启用通用换行符模式。   输入中的行可以以'\ n','\ r'或'\ r \ n'结尾,这些是   在返回给调用者之前将其翻译为“ \ n”。如果是 '',   通用换行模式已启用,但行尾返回到   呼叫者未翻译。如果它具有其他任何法律价值,   输入行仅由给定的字符串终止,并且该行   结尾将不翻译地返回给调用方。

     

在输出中,如果换行符为None,则任何写入的'\ n'字符都将转换为系统默认的行分隔符os.linesep。如果   换行符是”,不进行翻译。如果换行符是   其他合法值,则将任何写入的'\ n'字符翻译为   给定的字符串。

这意味着自python 3.2起,任何换行符(在您的情况下为\ r和\ n)都转换为os.linsep,它是操作系统的行分隔符

来源是python文档:https://docs.python.org/release/3.2/library/functions.html#open

答案 1 :(得分:3)

在Windows上,当以文本模式(默认)打开文件时,将\ n转换为\ r \ n,因此写入\ r \ n会为您\ r \ r \ n。仅在可移植的文本模式下写入\ n,并且使用了操作系统的正确行尾。

答案 2 :(得分:-1)

您只需要将打开的行更改为:

f = open("textfile.txt", "w+",newline='')

如果您使用的是python 2.x,请执行以下操作:

f = open("textfile.txt", "wb+")