0

私は Python スクリプトに取り組んでいます。これを実行すると、さまざまなファイルからのテキストがまとめられます。これにより、Web サイトの代替バージョンを作成して、さまざまなデザインを簡単に比較したり、それらがすべて同じ固有データを持っていることを確認したりできます。メニュー項目がすべてのバージョンで一貫していること。

特定の問題領域の 1 つは、さまざまな食事の宝庫であるメニューが常に同じであることを確認することです。したがって、私はこの関数を作成しました:

def insert_menu():
    with open("index.html", "r+") as index:
        with open("menu.html", "r+") as menu:
            for i in index:
                if "<!-- Insert Menu here -->" in i:
                    for j in menu:
                        index.write(j)

ただし、スタックオーバーフローの他の回答から必要なものを抽出する方法を見つけることができなかったため、希望どおりに動作しません。

現在の状態では、保存したテキストがmenu.htmlの最後に追加されindex.htmlます。

menu.htmlを含む行の下にテキストを書き込みますindex.html(ただし、必ずしも同じ行番号にあるとは限らないため、特定の行に書き込むオプションを除外します) <!-- Insert Menu here -->. そして、中身が全部menu.html書き終わったらいわば「続き」をしindex.htmlたい。index.html

基本的には、テキストを含む行の後にくさびにすることを意味しmenu.htmlますindex.html<!-- Insert Menu here -->、そのコメントの下に保持しなければならないテキストがさらにあります (スクリプトなど)。

ドキュメントからコピーされたindex.html、これは を囲むもの<!-- Insert Menu here -->です:

<html>
    <body>
        <div id="wrapper">
            <div id="container">

                <div class="map">
                </div>

                <!-- Insert Menu here -->

            </div><!-- Container ends here -->
        </div><!-- Wrapper ends here -->
    </body>
</html>

index.html上記のブロックはすべて大きな div 内にインデントされていることに注意してください。これを SO で簡単に複製することはできません。

コードを変更して目的の結果を得るにはどうすればよいですか?

そして、あなたが私を助けるのを助けるために、この質問をどのように明確にすることができますか?

4

4 に答える 4

1

ソース ファイルをその場で更新しようとしてもうまくいきません。読み取り中に「インデックス」に書き込んでも、あなたの考えは実行されません。目印の文字列に続く行が上書きされます。

代わりに、'index' と 'menu' の両方のソース ファイルを入力として扱い、3 番目のファイルを出力として作成する必要があります (基本的に、2 つの入力ファイルを結合された出力ファイルにマージします)。「クラシック」構文の使用:

output = open('merged.html', 'w')
for line in open('index.html'):
    if '<!-- Insert Menu here -->' in line:
        for menuline in open('menu.html'):
            output.write(menuline)
    else:
        output.write(line)

必要に応じて、それを「使用する」構文に変更するのは簡単です。

于 2013-08-02T00:27:52.987 に答える
0

これを試して、うまくいくかどうか教えてもらえますか? 私はあなたのファイルを持っていないので、あなたがそれを読んでいて、文字列に保存されていると仮定してください。

string = "blablabla \n  blebleble \n <!-- Insert Menu here --> \n bliblibli"
pattern = ".*<!-- Insert Menu here -->(.*)"
print re.match(pattern, string, re.S).groups()

これは、挿入メニュー --> の後に続くすべてのものと一致し、スペースや行ジャンプも含まれます。次の行までスキップする場合:

pattern = ".*<!-- Insert Menu here --> .*\n (.*)"

更新:これはファイル全体を読み取ることを意味することに気付きましたが、それは受け入れられますか? 乾杯!

于 2013-07-31T19:57:26.130 に答える