2016-12-23 1 views
0

私はPython 3.5.2でMacでコードを実行しています。 (pycharm)Python 3.5.2では何がありますか? (pycharm&Mac)

私はprint( "abcz \ rdef")を実行すると、defzを取得することを期待していましたが、私はdefを取得しました... 現在何が起こっていますか?

+0

あなたはウィンドウが必要です – YOU

+1

@YOU '\ r'は改行ですWindowsは '\ r \ n 'を使用しています –

+0

知識が古くなっています – YOU

答えて

2

ASCII文字\raka。0x0D別名。13別名。^M ** **
まず、Pythonのプロパティではなく、一般的なASCIIコードです。これは、ほぼすべてのプログラミング言語が文字\rと同じように動作することを意味します。
単数:\rです。ONE charです。


キャリッジリターンこれは言っ

が、それは基本的にラインの初めに戻り、Carriage Return (CR)に対応します。あなたが言うあなたのケースで

「PLZ abcz を印刷し、その後DEFバック初めと印刷を行きます」。 「最初に戻る」とは、現在の行を上書きすることを意味します。したがってdefabcを上書きしますが、zはそのままにしておき、最後にdefzとなります。

EX

print("a\rb") # => b 
print("abcdef\rLOL") #=> LOLdef 
#etc... 

改行:CR + LF対LF:

事実は、改行をお使いのOSに応じて、まったく同じ方法で処理されていないということです。 OSのほとんどは改行のために単一の\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. 

共通の問題:
私が最も一般的な問題は、Linux上のライン、Windowsのテキストファイルで行を読んでいると思います。 Linuxの開発者は、\nで終わることを期待しています。そして、文章を連結したいとしましょう。\nだけを取り除くと、危険な\rが残ってしまいます。

例:2つのファイルの各文を連結したいとします。上記の例では

# 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'はWindowsではなく* Mac *の改行文字です –

+0

私はWindowsがCRLFではなくCRであると言いましたか? – pltrdy

0

はありがとう私の質問に答えるために。私はあなたの例を試してみましたとして: (プリント( "\のRB")#=> B 印刷( "ABCDEF \ rLOL")#=> LOLdef

私はまだ答えをBだとLOL .... なぜそれが起こっているのか分かりません... 私は方法でパイチャを使用しています...私はそれを修正する方法を教えてください...

関連する問題