次の3行のUTF-8テキストファイル test.txt を読み込む処理をします
環境はWindows:改行CR+LFです
1行目\n1行目
2行目\n2行目
3行目\n3行目
Pythonコード:
>>> import codecs
>>> f = codecs.open("test.txt", "r", "utf-8")
>>> t = f.readline()
>>> print t
出力結果:
1行目\n1行目
\n の箇所で改行がされずそのまま文字として出力されています。
また、後半2行だけ変えてreadlines()で読み込みをします。
>>> ts = f.readlines()
>>> print ts
出力結果:
[u'1\u884c\u76ee\\n1\u884c\u76ee\r\n', u'2\u884c\u76ee\\n2\u884c\u76ee\r\n', u'3\u884c\u76ee\\n3\u884c\u76ee\r\n']
自動的に \n が \\n と変換されているように見えます
通常の open でも同様でした(行末は \r\n ではなく \n となった)
replace()にて \n → \\n という処理を自前で行ってから出力してきたので、今回のように勝手に \n という出力が出てきたことに少々戸惑っています
【質問】
・このように \n → \\n 自動変換の旨が記載されている公式ドキュメントのありかは?
・つまり総じて \ → \\ という変換が随時行われている、という理解で合っているか?
・この自動変換が起きうる組み込み関数等は他にあるか?
以上、どうぞ宜しくお願いいたします
エスケープシーケンスという物です。
ドキュメントはたとえば以下にあります。
http://docs.python.jp/2.5/ref/strings.html (真ん中あたりの表)
1) \n -> \\n になったというよりは \(バックスラッシュ) -> \\ になっています。
2) プリントする際にこのような表示になっています。
print 時に表示上の都合でこうなっています。
たとえば、print ts の部分をprint ts[0] にすると print t の時と同じく\nが表示されます。
3) 内部のデータが変換されているわけではありません。