2016-12-11 12 views
0

我想讓.txt文件的每一行以"結尾,但文件的編碼是gb2312gbk,因爲中文是包含的。所以,我創建了一個名爲heheda.txt文件,其內容如下(每行的末尾包含一個返程):如何將r'''添加到文件的每一行,如果它不以r結尾''''

從前有座山" 
shan裏有個廟 
"廟裏有個" 
laohe尚 

那我試過如下:

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

,並返回:

shan裏有個廟 

shan裏有個廟" 

laohe尚 
laohe�"� 

我不知道爲什麼年底的每一行是line[-2],因爲我已經試過line.endswith(r'"')line[-1] == r'"'。第一個句子得到正確的格式,而第二個句子出錯了()。

然後我試圖以二進制方式與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

更好地看到發生了什麼,使用打印再版(線),而不是打印線 –

+0

謝謝你提醒我再版的'()'這讓我知道真的發生了什麼! –

回答

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

相關問題