1

Github で使用したい壊れたライブラリを修正しようとしています。

問題をローカルで「修正」しました。しかし、私はそれが非常にきれいな方法だとは思わない...

私はインターネット アーカイブで WARC ライブラリを突っついています

lib が作成されてから、ARC ファイルを作成するツールが少し変更されました。その結果、ビルトイン パーサーは、ファイル内のメタデータを予期していないため、失敗します。

私のローカル修正は次のようになります。

    if header.startswith("<arcmetadata"):
        while not header.endswith("</arcmetadata>\n"):
            header = self.fileobj.readline()
        header = self.fileobj.readline()
        header = self.fileobj.readline()

readlines()そして、次の 2 つの空行を削除するために 2 回呼び出しているかどうかはわかりません ("/n"ファイルオブジェクトを進める最もクリーンな方法は、含むことです。

これは良いパイソンですか?またはより良い方法はありますか?

4

3 に答える 3

2

コードはコピー/貼り付けエラーのようです。を使用することに問題はありません。実行し.readline()ていることを文書化するだけです。

# skip metadata
if header.startswith("<arcmetadata"):
    while not header.endswith("</arcmetadata>\n"):
        header = self.fileobj.readline()
    #NOTE: header ends with `"</arc..."` here i.e., it is not blank

# skip blank lines
while not header.strip():
    header = self.fileobj.readline()

ところで、ファイルに xml が含まれている場合は、xml パーサーを使用して解析します。手でやらないでください。

于 2013-11-26T00:39:21.670 に答える
1

あなたがしていることに本質的に悪いことは何もありませんが、次のように書く方が意味論的かもしれません:

next(self.fileobj, None)

次の行を投げていることを示す変数の割り当てなし。

于 2013-11-25T22:36:54.207 に答える