Я запускаю коды в python 3.5.2 в mac. (pycharm)Что такое r в python 3.5.2? (pycharm & Mac)
Когда я запускаю печать («abcz \ rdef»), я ожидал получить defz, но у меня получилось ... Что происходит прямо сейчас?
Я запускаю коды в python 3.5.2 в mac. (pycharm)Что такое r в python 3.5.2? (pycharm & Mac)
Когда я запускаю печать («abcz \ rdef»), я ожидал получить defz, но у меня получилось ... Что происходит прямо сейчас?
ASCII Char\r
aka.0x0D
aka.13
aka.^M
: **
Во-первых, это не свойство Python, а общий код ASCII. Это означает, что почти все языки программирования будут вести себя одинаково с символом \r
.
Примечание единственное: \r
is ONE знак.
Возврат каретка
Это говорит, что соответствует Carriage Return (CR), которые, в основном восходят к началу строки.
В вашем случае вы говорите, «плз печать ABCZ затем вернитесь в начало и печати четкости». «Возвращаясь к началу» означает, что вы будете перезаписывать текущую строку. Итак, def
перезаписать abc
, z
оставлен как есть, давая вам defz
в конце.
экс:
print("a\rb") # => b
print("abcdef\rLOL") #=> LOLdef
#etc...
Newline: LF против CR + LF:
Дело в том, что новые строки не обрабатываются точно так же, в зависимости от вашей операционной системы. Большинство ОС будут использовать один \n
для новых строк, в то время как Windows использует \r\n
, что может вызвать странные проблемы (см. Примеры ниже).
Цитирование wikipedia:
LF: Unix and Unix-like systems (Linux, OS X, FreeBSD, Multics, AIX, Xenix, etc.), BeOS, Amiga, RISC OS, and others[1] CR+LF: Microsoft Windows, DOS (MS-DOS, PC DOS, etc.), DEC TOPS-10, RT-11, CP/M, MP/M, Atari TOS, OS/2, Symbian OS, Palm OS, Amstrad CPC, and most other early non-Unix and non-IBM OSes CR: Commodore 8-bit machines, Acorn BBC, ZX Spectrum, TRS-80, Apple II family, Oberon, the classic Mac OS up to version 9, MIT Lisp Machine and OS-9 RS: QNX pre-POSIX implementation 0x9B: Atari 8-bit machines using ATASCII variant of ASCII (155 in decimal) LF+CR: Acorn BBC and RISC OS spooled text output.
Общие проблемы:
Я думаю, наиболее распространенной проблемой является линия считывании строки Windows, текстовый файл на Linux. В качестве Linux dev вы ожидаете, что линия закончится с \n
и, допустим, вы хотите выполнить предложения, вы удалите только \n
, оставив опасный \r
внутри.
Пример: мы хотим объединить каждое предложение из двух файлов.
# Open our two files
fn1="file1.txt"
fn2="file2.txt"
f1=open(fn1, 'r')
f2=open(fn2, 'r')
while True:
# Read 1 line in each
l1 = f1.readline()
l2 = f2.readline()
# Check lines are not empty, or break
if not l1 or not l2:
break
# Remove new lines
l1 = l1.replace('\n', '')
l2 = l2.replace('\n', '')
# Print the result
print("%s %s" % (l1, l2))
В приведенном выше примере, если l1
происходит от Windows, вы будете видеть только l2
распечатаны. (На самом деле его перезаписаны, так что если l1
больше, что l2
вы увидите l2
+ конец l1
)
Exemple: Довольно прохладный пример, чтобы сделать счетчик увеличить число без печати новый линия, попробуйте это:
for i in range(100000):
print("\r%d" % i, end="")
pltrdy
'\ r' - это новая черта для * Mac *, а не Windows –
Я только что сказал, что Windows использует CRLF, а не CR, разве это не так? – pltrdy
Спасибо для ответа на мой вопрос. Как я попробовал ваш пример: (печать ("а \ Р.Б.") # => б печать ("ABCDEF \ rLOL") # => LOLdef
Я до сих пор получил б и LOL за ответы .... я не знаю, почему он держит происходит ... Я использую PyCharm кстати ... Позвольте мне знать, как я могу это исправить ...
вам нужно окно – YOU
@YOU '\ r' является символом новой строки для Mac, а не для Windows. Windows использует '\ r \ n' –
, что знание устарело – YOU