私はPython 3.5.2でMacでコードを実行しています。 (pycharm)Python 3.5.2では何がありますか? (pycharm&Mac)
私はprint( "abcz \ rdef")を実行すると、defzを取得することを期待していましたが、私はdefを取得しました... 現在何が起こっていますか?
私はPython 3.5.2でMacでコードを実行しています。 (pycharm)Python 3.5.2では何がありますか? (pycharm&Mac)
私はprint( "abcz \ rdef")を実行すると、defzを取得することを期待していましたが、私はdefを取得しました... 現在何が起こっていますか?
ASCII文字\r
aka。0x0D
別名。13
別名。^M
** **
まず、Pythonのプロパティではなく、一般的なASCIIコードです。これは、ほぼすべてのプログラミング言語が文字\r
と同じように動作することを意味します。
単数:\r
はです。ONE charです。
キャリッジリターンこれは言っ
が、それは基本的にラインの初めに戻り、Carriage Return (CR)に対応します。あなたが言うあなたのケースで
「PLZ abcz を印刷し、その後DEFバック初めと印刷にを行きます」。 「最初に戻る」とは、現在の行を上書きすることを意味します。したがってdef
はabc
を上書きしますが、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
'\ r'はWindowsではなく* Mac *の改行文字です –
私はWindowsがCRLFではなくCRであると言いましたか? – pltrdy
はありがとう私の質問に答えるために。私はあなたの例を試してみましたとして: (プリント( "\のRB")#=> B 印刷( "ABCDEF \ rLOL")#=> LOLdef
私はまだ答えをBだとLOL .... なぜそれが起こっているのか分かりません... 私は方法でパイチャを使用しています...私はそれを修正する方法を教えてください...
あなたはウィンドウが必要です – YOU
@YOU '\ r'は改行ですWindowsは '\ r \ n 'を使用しています –
知識が古くなっています – YOU