2012-08-23 51 views
-3

我認爲錯誤發生在讀取函數中。它不能在圖像見再版輸出python中的string.find()無法處理特殊字符

我已經在使用Python string.find()讀取超出特殊字符如下:

indexOfClosedDoc = temp.find("</DOC>",indexOfOpenDoc) 

然而,當字符串中有如下文字:

SUB 
</DOC> 

其中SUB是特殊字符,temp.find找不到標籤。導致它失敗

enter image description here

代碼:關於如何解決這一問題

例任何建議

handle = open("error.txt",'r'); 
temp = handle.read(); 
index = temp.find("</DOC>",0) 
if(index == -1): 
    print "Error" 
    exit(1) 

把圖像文本的文本文件,然後運行該代碼

這裏是示例中文本的temp變量的repr。在eror.txt的文字是從線29722的一切形象

' </P>\n\n' 

注意:讀取()從來不讀超出SUB功能,從而發現出了問題的

+5

請給一些導致它失敗的數據的一個例子:如果文件使用一個多字節編碼,則.find()不會即使它沒有0x1A如工作。什麼「特殊字符」造成這種情況? – BrenBarn

+0

你的意思是*特殊字符*,究竟是什麼意思? – behnam

+0

請看附件圖片 – Programmer

回答

2

答案是使用'rb'模式打開文件。在Windows上,只用'r'打開文件將導致它使用舊的DOS行爲停止在0x1A(一個DOS EOF字符)。另請參見Line reading chokes on 0x1A

+0

感謝您的答案,但爲什麼我得到-2。我認爲這是一個很好的問題。 – Programmer

-1

檢查indexOfOpenDoc值,我懷疑它比位置出現更大。

+0

問題是在閱讀功能,因爲它不能讀取beyong sub – Programmer

0

注:

import codecs 

with codecs.open('file.utf16', 'w', encoding='utf-16') as file: 
    file.write(u"abcd") # write a string using utf-16 encoding 

#XXX incorrect code don't use it 
with open('file.utf16', 'r') as f: 
    temp = f.read() 
    i = temp.find('bc') 
    print i #XXX -> -1 not found 

with open('file.utf16', 'rb') as f: 
    temp = f.read() 
    i = temp.find('bc') 
    print i #XXX -> -1 not found 

# works 
with codecs.open('file.utf16', encoding='utf-16') as f: 
    temp = f.read() 
    i = temp.find('bc') 
    print i # -> 1 found