2016-12-23 3 views
0

Я запускаю коды в python 3.5.2 в mac. (pycharm)Что такое r в python 3.5.2? (pycharm & Mac)

Когда я запускаю печать («abcz \ rdef»), я ожидал получить defz, но у меня получилось ... Что происходит прямо сейчас?

+0

вам нужно окно – YOU

+1

@YOU '\ r' является символом новой строки для Mac, а не для Windows. Windows использует '\ r \ n' –

+0

, что знание устарело – YOU

ответ

2

ASCII Char\raka.0x0Daka.13aka.^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

+0

'\ r' - это новая черта для * Mac *, а не Windows –

+0

Я только что сказал, что Windows использует CRLF, а не CR, разве это не так? – pltrdy

0

Спасибо для ответа на мой вопрос. Как я попробовал ваш пример: (печать ("а \ Р.Б.") # => б печать ("ABCDEF \ rLOL") # => LOLdef

Я до сих пор получил б и LOL за ответы .... я не знаю, почему он держит происходит ... Я использую PyCharm кстати ... Позвольте мне знать, как я могу это исправить ...

Смежные вопросы