Java(文字列内)と比較すると、のようなことをします"First Line\r\nSecond Line"
。
では、通常のファイルに複数の行を書き込むために、Pythonでそれをどのように行うのでしょうか。
Java(文字列内)と比較すると、のようなことをします"First Line\r\nSecond Line"
。
では、通常のファイルに複数の行を書き込むために、Pythonでそれをどのように行うのでしょうか。
それはあなたがどれだけ正しくなりたいかによります。\n
通常は仕事をします。本当に正しく理解したい場合は、os
パッケージ内の改行文字を検索します。(実際には呼ばれていlinesep
ます。)
注:Python APIを使用してファイルに書き込む場合は、を使用しないでくださいos.linesep
。使用するだけ\n
です; Pythonは、それをプラットフォームに適した改行文字に自動的に変換します。
改行文字は\n
です。文字列内で使用されます。
例:
print('First line \n Second line')
\n
改行文字はどこにありますか。
これにより、次の結果が得られます。
First line
Second line
Python 2を使用する場合は、print関数で括弧を使用しません。
新しい行を個別に書き込むことも、単一の文字列内に書き込むこともできます。これは簡単です。
line1 = "hello how are you"
line2 = "I am testing the new line escape sequence"
line3 = "this seems to work"
'\ n'は個別に書くことができます:
file.write(line1)
file.write("\n")
file.write(line2)
file.write("\n")
file.write(line3)
file.write("\n")
hello how are you
I am testing the new line escape sequence
this seems to work
他の人が前の回答で指摘したように、文字列の関連するポイントに\nを配置します。
line = "hello how are you\nI am testing the new line escape sequence\nthis seems to work"
file.write(line)
hello how are you
I am testing the new line escape sequence
this seems to work
プラットフォームに依存しないラインブレーカー:Linux、Windows、IOS
import os
keyword = 'physical'+ os.linesep + 'distancing'
print(keyword)
出力:
physical
distancing
編集:私は今より年上で賢いです。これは、トップレベルのインデント(関数定義など)を使用していなくても正しく機能する、より読みやすいソリューションです。
import textwrap
file.write(textwrap.dedent("""
Life's but a walking shadow, a poor player
That struts and frets his hour upon the stage
And then is heard no more: it is a tale
Told by an idiot, full of sound and fury,
Signifying nothing.
"""))
元の答え
一度に複数行のテキストを入力する場合、これが最も読みやすい形式であることがわかります。
file.write("\
Life's but a walking shadow, a poor player\n\
That struts and frets his hour upon the stage\n\
And then is heard no more: it is a tale\n\
Told by an idiot, full of sound and fury,\n\
Signifying nothing.\n\
")
各行の終わりにある\は、新しい行をエスケープします(これによりエラーが発生します)。
print
引数なしで呼び出すだけの場合は、空白行が出力されます。
print
次のようなファイルに出力をパイプすることができます(例を考慮して):
f = open('out.txt', 'w')
print 'First line' >> f
print >> f
print 'Second line' >> f
f.close()
OSに依存しないだけでなく(os
パッケージを使用しなくても)、文字列内に配置するよりも読みやすくなり\n
ます。
このprint()
関数には、文字列の末尾にオプションのキーワード引数がありますend
。これは、デフォルトでOSの改行文字になります。\n
。したがって、呼び出しているときprint('hello')
、Pythonは実際に印刷してい'hello' + '\n'
ます。つまり、print
引数なしで呼び出している場合、実際には印刷'' + '\n'
されているため、改行が返されます。
複数行の文字列を使用します。
s = """First line
Second line
Third line"""
f = open('out.txt', 'w')
print s >> f
f.close()
Pythonでは、改行文字を使用できます。\n
他の回答で述べられているように、「改行文字は\nです。文字列内で使用されます」。
最も簡単で読みやすい方法は、新しい行の名前としてnlを使用して「format」関数を使用し、印刷する文字列を印刷する正確な形式に分割することです。
python2:
print("line1{nl}"
"line2{nl}"
"line3".format(nl="\n"))
python3:
nl = "\n"
print(f"line1{nl}"
f"line2{nl}"
f"line3")
次のように出力されます。
line1
line2
line3
このようにしてタスクを実行し、コードの可読性も高くなります:)
と同じように'\n'
、おそらくは必要ないでしょうが'\r'
。Javaバージョンにある理由はありますか?必要な場合、または必要な場合は、Pythonでも同じように使用できます。
「\r」や「\n」など、Javaの文字列リテラルのほとんどのエスケープ文字はPythonでも有効です。
\ n-単純な改行文字の挿入は機能します:
# Here's the test example - string with newline char:
In [36]: test_line = "Hi!!!\n testing first line.. \n testing second line.. \n and third line....."
# Output:
In [37]: print(test_line)
Hi!!!
testing first line..
testing second line..
and third line.....
インタラクティブなPythonシェルまたはJupyterノートブックを使用して文字列を検査すると、\n
およびその他のバックスラッシュされた文字列が文字通り\t
レンダリングされることに注意してください。
>>> gotcha = 'Here is some random message...'
>>> gotcha += '\nAdditional content:\n\t{}'.format('Yet even more great stuff!')
>>> gotcha
'Here is some random message...\nAdditional content:\n\tYet even more great stuff!'
改行、タブ、およびその他の特別な非印刷文字は、印刷またはファイルへの書き込み時にのみ空白としてレンダリングされます。
>>> print('{}'.format(gotcha))
Here is some random message...
Additional content:
Yet even more great stuff!
Python 3では、言語がプラットフォームのネイティブ表現で改行をエンコードします。つまり\r\n
、Windowsで、そして\n
大人のシステムだけで。
U * xシステムでも、Windowsの行末がテキストモードのファイルを読み取ると、テキストに対して正しい結果が返されます。つまり、文字がサイレントにドロップさ\r
れる前の文字が返されます。\n
ファイル内のバイトを完全に制御する必要がある場合は、バイナリモードを使用できます。その場合、すべてのバイトは正確に1バイトに対応し、Pythonは変換を実行しません。
>>> # Write a file with different line endings, using binary mode for full control
>>> with open('/tmp/demo.txt', 'wb') as wf:
... wf.write(b'DOS line\r\n')
... wf.write(b'U*x line\n')
... wf.write(b'no line')
10
9
7
>>> # Read the file as text
>>> with open('/tmp/demo.txt', 'r') as text:
... for line in text:
... print(line, end='')
DOS line
U*x line
no line
>>> # Or more demonstrably
>>> with open('/tmp/demo.txt', 'r') as text:
... for line in text:
... print(repr(line))
'DOS line\n'
'U*x line\n'
'no line'
>>> # Back to bytes!
>>> with open('/tmp/demo.txt', 'rb') as binary:
... for line in binary:
... print(line)
b'DOS line\r\n'
b'U*x line\n'
b'no line'
>>> # Open in binary, but convert back to text
>>> with open('/tmp/demo.txt', 'rb') as binary:
... for line in binary:
... print(line.decode('utf-8'), end='')
DOS line
U*x line
no line
>>> # Or again in more detail, with repr()
>>> with open('/tmp/demo.txt', 'rb') as binary:
... for line in binary:
... print(repr(line.decode('utf-8')))
'DOS line\r\n'
'U*x line\n'
'no line'
\n文字列の行を区切ります。次の例では、レコードをループで書き込み続けています。各レコードは。で区切られ\n
ます。
f = open("jsonFile.txt", "w")
for row_index in range(2, sheet.nrows):
mydict1 = {
"PowerMeterId" : row_index + 1,
"Service": "Electricity",
"Building": "JTC FoodHub",
"Floor": str(Floor),
"Location": Location,
"ReportType": "Electricity",
"System": System,
"SubSystem": "",
"Incomer": "",
"Category": "",
"DisplayName": DisplayName,
"Description": Description,
"Tag": tag,
"IsActive": 1,
"DataProviderType": int(0),
"DataTable": ""
}
mydict1.pop("_id", None)
f.write(str(mydict1) + '\n')
f.close()
"{}\n{}\n{}".format(
"line1",
"line2",
"line3"
)
個人的にこのフォーマットを好む