2016-09-29 10 views
0

.htmlファイルを生のテキストとして読み込み、ユニコード文字を含む部分文字列のインスタンスを別の部分文字列に置きたい。私は、mm03.htmlを読んで、文字列としての生のテキストを解析し、出力は次のようになりますように置き換える呼び出すしたいと思いますユニコードを含むHTMLファイルから読み込んだ文字列に.replace()メソッドを使用する

<span style='font-size:14.0pt'>«test»</span> 

<span style='font-size:14.0pt'>TEST</span> 
ファイル mm03.htmlは、テキストの一行のみが含まれていることを前提とし

私はこれを行うことを試みた最初の時間は、私はそれが最初originaを印刷することを期待して... ...

# -*- coding: utf-8 -*- 
import codecs 
htmlBase = codecs.open("mm03.html",'r') 
htmlFill = htmlBase.read() 
print htmlFill 
htmlFill = htmlFill.replace("«test»","TEST") 
print htmlFill 
htmlBase.close() 

を次のコードを書きました上記のl行、そして2行目の順に並んでいます。代わりに、最初の行が2回リストされました。

大丈夫です。だからおそらくUnicodeのデコードの問題でしょうか?たぶん、しかし、私はこのサイト全体のUnicode関連のアドバイスに従ってコードを変更すると、さまざまな色合いの問題が残っています。さらに、所望の機能は、私はPythonでHTMLファイルを読み込むことは知らない何かがあると信じて私をリードしている...明示的

htmlBase = """<span style='font-size:14.0pt'>«test»</span>""" 

...としてhtmlBaseを定義することによって達成することができます。私は 'w'モードでmmo3.htmlを開こうとしましたが、それは動作していないようで、元のファイルを壊す傾向があります。読み込み専用ファイルから読み込んだ文字列自体が読み込み専用であることはあまり意味がありませんが、間違っている可能性があります。

以下は、私が噛み砕いたいくつかのスクリプト/出力のペアです。

  1. 引用符で囲まれていない文字を追加する 'U' の私が望むの文字列を置き換えるために、前に

    # -*- coding: utf-8 -*- 
    import codecs 
    htmlBase = codecs.open("mm03.html",'r') 
    htmlFill = htmlBase.read() 
    print htmlFill 
    htmlFill = htmlFill.replace(u"«test»","TEST") 
    print htmlFill 
    htmlBase.close() 
    

    出力:( 'UTF-8')へ

    <span style='font-size:14.0pt'>½test╗</span> 
    Traceback (most recent call last): 
        File "test2.py", line 6, in <module> 
        htmlFill = htmlFill.replace(u"«test»","TEST") 
    UnicodeDecodeError: 'ascii' codec can't decode byte 0xab in position 31: ordinal not in range(128) 
    
  2. 適用.decode .read()から渡される文字列

    # -*- coding: utf-8 -*- 
    import codecs 
    htmlBase = codecs.open("mm03.html",'r') 
    htmlFill = htmlBase.read().decode('utf-8') 
    print htmlFill 
    htmlFill = htmlFill.replace(u"«test»","TEST") 
    print htmlFill 
    htmlBase.close() 
    

    出力:

    Traceback (most recent call last): 
        File "test2.py", line 4, in <module> 
        htmlFill = htmlBase.read().decode('utf-8') 
        File "C:\Python27\lib\encodings\utf_8.py", line 16, in decode 
        return codecs.utf_8_decode(input, errors, True) 
    UnicodeDecodeError: 'utf8' codec can't decode byte 0xab in position 31: invalid start byte 
    
  3. 適用.encode( 'UTF-8').readから渡された文字列()

    # -*- coding: utf-8 -*- 
    import codecs 
    htmlBase = codecs.open("mm03.html",'r') 
    htmlFill = htmlBase.read().encode('utf-8') 
    print htmlFill 
    htmlFill = htmlFill.replace(u"«test»","TEST") 
    print htmlFill 
    htmlBase.close() 
    

    出力へ:

    Traceback (most recent call last): 
        File "test2.py", line 4, in <module> 
        htmlFill = htmlBase.read().encode('utf-8') 
    UnicodeDecodeError: 'ascii' codec can't decode byte 0xab in position 31: ordinal not in range(128) 
    
  4. 適用.decode ( 'utf-8')を.read()から渡された文字列に、ターゲット部分文字列の 'u'サフィックスなしで置き換えます。

    # -*- coding: utf-8 -*- 
    import codecs 
    htmlBase = codecs.open("mm03.html",'r') 
    htmlFill = htmlBase.read().decode('utf-8') 
    print htmlFill 
    htmlFill = htmlFill.replace("«test»","TEST") 
    print htmlFill 
    htmlBase.close() 
    

    出力:

    Traceback (most recent call last): 
        File "test2.py", line 4, in <module> 
        htmlFill = htmlBase.read().decode('utf-8') 
        File "C:\Python27\lib\encodings\utf_8.py", line 16, in decode 
        return codecs.utf_8_decode(input, errors, True) 
    UnicodeDecodeError: 'utf8' codec can't decode byte 0xab in position 31: invalid start byte 
    
  5. から渡された文字列に.encode( 'UTF-8')を適用します。

    # -*- coding: utf-8 -*- 
    import codecs 
    htmlBase = codecs.open("mm03.html",'r') 
    htmlFill = htmlBase.read().encode('utf-8') 
    print htmlFill 
    htmlFill = htmlFill.replace("«test»","TEST") 
    print htmlFill 
    htmlBase.close() 
    

    出力をサブストリング対象に「U」サフィックスなし、)(読み:あなたはstr.replace()に渡す前に交換したい文字列をデコードする必要が

    Traceback (most recent call last): 
        File "test2.py", line 4, in <module> 
        htmlFill = htmlBase.read().encode('utf-8') 
    UnicodeDecodeError: 'ascii' codec can't decode byte 0xab in position 31: ordinal not in range(128) 
    
+0

あなたは、<スパンのスタイル=「フォントサイズ:14.0pt」> htmlファイルが '行が含まれていると言う«テスト»'して、 '置き換え(「«最初»」という、 "FIRST") 'メソッドは機能しません。 _もちろん、not_です。文字列 'first»'はファイル内にないためです。 'replace(" test "、" TEST ")'を使うとうまくいきます。 – martineau

+0

私は今それを修正しました。私は実際のケースから特定の値を修正しましたが、私はいくつか見逃したと思います。しかし、まだ動作しません。 – Bibliophael

+0

私が言いました変更後に私のために働いてくれました。 – martineau

答えて

0

。これは私の作品:

# -*- coding: utf-8 -*- 
import codecs 
htmlBase = codecs.open("mm03.html",'r') 
htmlFill = htmlBase.read() 
htmlFill = codecs.decode(htmlFill,'utf-8') 
substr = codecs.decode("«test»",'utf-8') 
htmlFill = htmlFill.replace(substr,"TEST") 
print htmlFill 
htmlBase.close() 
関連する問題