2016-11-05 5 views
0

BOMのないエンコーディングutf-8を使ってtxtファイルにリストを書き込もうとしました。しかし、問題を持っていることである: 私は、BOMのエンコーディングwithou UTF-8でそのファイルを作成した場合:リストをファイルに書き込むtxt(utf-8)

ポ 
    1 
    田 
    11 
    直 
    11 
    子 
    11 

を、リストにそれを読むために私の機能を使用します。私はOK結果を得た

import codecs 
def file_to_list(file_name): 
    results = [] 
    f = codecs.open(file_name, encoding='utf-8') 
    for line in f: 
     results.append(line.replace('\r\n', '')) 
    return results 
list_1 = file_to_list('test_read.txt') 
print(list_1) 

['ポ', '1', '田', '11', '直', '11', '子', '11'] しかし、この後、私は再びそのファイルを提出して読み取るために書き戻すために別の関数を使用して、問題が表示されます。

def list_to_file(file_name, thelist): 
    f = codecs.open(file_name, "w", encoding='utf-8') 
    for item in thelist: 
     f.write("%s\n" % item) 
list_to_file('test_read.txt', list_1) 
list_2 = file_to_list('test_read.txt') 
print(list_2) 

印刷の返品は:['ポ\n', '1\n', '田\n', '11\n', '直\n', '11\n', '子\n', '11\n'] だから、'\n'を作るのは間違っていますか?

+1

'line.replace( 'の\ r \ n'、 ' ') 'は' list_to_file'で書かれた普通の '\ n''バイトには触れません。ところで、Py2とPy3はUnicodeの処理に大きな違いがあるので、Pythonのバージョンには常にUnicodeに関する質問があります。また、UTF-8でエンコードされたファイルは、何らかの壊れたソフトウェアで使用する必要がある場合を除いてBOMで始まらなければなりません。 –

+0

@ PM2Ringあなたはそれを削除する方法を教えてもらえますか? – AlphaWolf

+0

あなたはモーゼの答えを試してください!この記事が参考になるかもしれません:[Pragmatic Unicode](http://nedbatchelder.com/text/unipain.html)、SOベテランのNed Batchelderによって書かれました。 –

答えて

2

末尾の空白文字/改行文字は、プラットフォームによって異なる場合があります。 は、のストリップです。さらに、ファイルには\nと書いていますが、関数には\r\nが必要です。あなたのfile_to_list機能で

、交換してください:

results.append(line.replace('\r\n', '')) 

results.append(line.rstrip()) 

参照して:

>>> 'some line\n'.replace('\r\n', '') 
'some line\n' 
+0

完璧に動作します、ありがとう! – AlphaWolf

関連する問題