Запись дополнительных строк Python при использовании \ r \ n (в VS Code) - PullRequest
0 голосов
/ 28 ноября 2018

Очень новичок в Python, и я следую онлайн-видео-урок для изучения Python, используя VS Code.Следующий код используется для генерации текстового файла:

#
# 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 голосов
/ 28 ноября 2018

В Windows запись \ n преобразуется в \ r \ n, когда файл открывается в текстовом режиме (по умолчанию), поэтому запись \ r \ n дает вам \ r \ r \ n.Пишите \ n только в текстовом режиме, который является переносимым и используется правильный конец строки для ОС.

0 голосов
/ 28 ноября 2018

символ новой строки управляет работой универсальных символов новой строки (это относится только к текстовому режиму).Это может быть None, '', '\ n', '\ r' и '\ r \ n'.Он работает следующим образом:

На вводе, если для новой строки установлено значение Нет, включается режим универсальной новой строки.Строки на входе могут оканчиваться на «\ n», «\ r» или «\ r \ n», и они переводятся в «\ n» перед возвратом вызывающей стороне.Если это '', включается универсальный режим новой строки, но окончания строки возвращаются вызывающей стороне без перевода.Если он имеет какие-либо другие допустимые значения, входные строки заканчиваются только данной строкой, а окончание строки возвращается вызывающей стороне без перевода.

На выходе, если символ новой строки равен None, любой '\ n'записанные символы переводятся в системный разделитель строк по умолчанию, os.linesep.Если перевод строки - '', перевод не выполняется.Если символ новой строки является любым из других допустимых значений, любые написанные символы '\ n' преобразуются в данную строку.

Это означает, что начиная с python 3.2 любой символ новой строки (в вашем случае \ r и \ n) переводится в os.linsep, который является линейным разделителем вашей ОС

Источник документации по питону: https://docs.python.org/release/3.2/library/functions.html#open

0 голосов
/ 28 ноября 2018

Вам просто нужно изменить открытую строку на:

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

Если вы используете python 2.x, выполните:

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