2016-12-11 16 views
0

.txtファイルの各行の末尾をとしたいのですが、ファイルのコーディングはgb2312ですまたは中国語が含まれているのでgbkです。だから私は、その内容が次のように(各行の終わりにはリターンが含まれている)であるheheda.txtという名前のファイルを、作成します。ファイルの各行にr '"'を追加するにはどうすればいいですか?

for line in open('heheda.txt', 'r'): 
    if not line[-2] == r'"': 
     print line 
     line = line[:-1] + r'"' + line[-1:] 
     print line 

、それが返されます。

从前有座山" 
shan里有个庙 
"庙里有个" 
laohe尚 

を次に私が試したことは次のとおりです。

shan里有个庙 

shan里有个庙" 

laohe尚 
laohe�"� 

私はline.endswith(r'"')line[-1] == r'"'を試してみましたので、各行の終わりには、line[-2]である理由私は知りません。最初の文章は正しい書式をとり、2番目の文章は何か間違っています()。

は、その後、私は、私は再び私を驚かせた、rbとバイナリモードで読み取ろうとしました:

a_file = open(data_path+'heheda.txt', 'rb') 
for line in a_file: 
    if line[-3] != r'"': 
     print line 
     line = line[:-2] + r'"' + line[-2:] 
     print line 

、それが返されます。

shan里有个庙 

shan里有个庙" 

laohe尚 
laohe�"�� 

この時、私はとline[-3] != r'"'使用する必要があります文末が"で終わるかどうかを判断する条件。 何が起こるかわかりません。 ところで、私はWindows7でPython 2.7.11で働いています。

何が起こっているのか分かりませんか?

+1

は、より良い何が起こっているかを見てみましょうどの ')(はrepr'を私に思い出させるために代わりに印刷行の –

+0

感謝を印刷のrepr(ライン)を使用するには私は本当に何が起こるか知っている! –

答えて

2

Windowsは、改行として"\r\n"を使用します。これは、テキスト読み取りモードで自動的に"\n"に変換されます。しかし、あなたの最後の行に改行文字はありません。

だけで改行文字を削除してから"をテスト:

with open('heheda.txt', 'r') as lines: 
    for line in lines: 
     line = line.rstrip() 
     if not line.endswith('"'): 
      line += '"' 
     print line 
+0

Windowsは\ r \ nで、\ n \ rは使用しません。 –

+0

'repr()'を使った後、最後の行は '\ r \ n'で終わりです。そして 'rstrip()'は文字列の最後に '\ r \ n '、' \ t'をフィルタリングすることができます。 –

+0

@JohnMachin:あなたは正しい – Daniel

関連する問題