問題タブ [difflib]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
121 参照

python - Python で差分を外挿する

ライブラリを使用して、2 つの json ファイル間の差分を推定しています。私のコードはそれらを辞書にロードし、datadiffを使用して 2 つのデータ構造の違いを取得します。問題は、次の出力をさらに処理したいということです:

2 つのデータ構造で見つかった差分の html を作成します。それを行うには、コマンドの出力を処理して行に分割する必要があります。次に、行が + で始まる場合、出力を比較する 2 番目のファイルを参照する必要があることがわかります。行が - で始まる場合は、それを最初のファイルに関連付ける必要があります。マイコード:

このコードは私に TypeError を与えます:

datadiff.diff 全体を文字列に変換できますが、1 行の文字列に変換されるため、すべての行を取得するために分割する必要があります。

データ差分出力:

0 投票する
0 に答える
1943 参照

python - difflib に代わるより強力な代替手段は何ですか?

リビジョンを追跡できるようにする必要があるスクリプトに取り組んでいます。一般的な考え方は、最初のエントリがフィールドの名前 (つまり、「タイトル」または「説明」など) であり、2 番目のエントリがそのフィールドの最初のバージョンであり、3 番目のエントリが次のタプルのリストを与えることです。改訂版。だから、このようなもの:

ここでpython docx、スクリプトを使用して、元のバージョンと、太字で変更された新しいバージョンを表示する Word ファイルを作成します。例:


元のタイトル:

これはタイトルの最初のバージョンです

改訂されたタイトル:

これは、タイトルの2 番目のバージョンです。


これを行う方法はpython docx、タプルのリストを作成することです。最初のエントリはテキストで、2 番目のエントリはフォーマットです。したがって、改訂されたタイトルを作成する方法は次のようになります。

最近発見しdifflibたので、これはかなり簡単な作業だと思いました。実際、上記のサンプルのような単純な単語の置換については、次の関数で実行できます。

何か他のことをしたいときに問題が発生します。たとえば、'teh' を 'the' に変更すると、th e h生成されます (スペースがないと、書式設定を理解できませんでした)。もう 1 つの問題は、末尾に追加された余分なテキストが変更として表示されない (またはまったく表示されない) ことです。

それで、皆さんへの私の質問は、difflibより複雑なテキスト比較を処理するのに十分強力な代替手段はありますか、それとも、difflib私が望むものにうまく機能するようにするにはどうすればよいでしょうか? 前もって感謝します

0 投票する
1 に答える
1120 参照

python - python difflib 比較出力形式

Python で difflib.compare を使用して、2 つのテキスト ファイルを比較します。比較は本質的に文字列のリストを返すことを知っています。文字列が最初のテキスト ファイルに固有の場合、文字列の前に「-」を配置し、文字列が 2 番目のテキスト ファイルに固有の場合、文字列の前に「+」を配置します。

私の問題は、保持する文字列を決定するためのコードを作成しようとしていることです。現在、各文字列で「-」を探し始めました。見つかった場合は、その文字列を使用するかどうかを判断するロジックを実行しました。使用しない場合は、「+」を1行または2行調べました。

ほとんどすべての場合、「-」行が「+」行の前にありました。しかし今、「+」行が「-」行の前にあるインスタンスを取得しています。これは、出力テキスト ファイルに書き込む正しい行が見つからないため、コードを破棄しています。文字列が配列に書き込まれる方法の背後にあるロジックを知っている人はいますか?最初に来る行番号に基づいていますか?

0 投票する
2 に答える
641 参照

python - 3 つ以上のファイル名を持つ difflib

比較しようとしているファイル名がいくつかあります。ここではいくつかの例を示します。

私がする必要があるのは、各ファイル名から「FilePrefix」を抽出することです。これは、ディレクトリによって異なります。多くのjpgを含むいくつかのフォルダーがあります。各フォルダー内で、各 jpg には、そのディレクトリ内の他のすべての jpg と共通の FilePrefix があります。jpg ファイル名の変数部分が必要です。FilePrefix がどのようなものになるかを事前に予測することはできません。

difflib (Python) を使用して 2 つのファイル名を比較し、そのように FilePrefix (およびその後の変数部分) を抽出するというアイデアがありました。次の問題に遭遇しました。

ご覧のとおり、最初のsizeものは一致しません。10 の位と 1 位の位が混同されているため、2 つ以上のファイルの違いを照合するのが難しくなっています。sizeディレクトリ内のすべてのファイルから最小値を見つける正しい方法はありますか? または、FilePrefix を抽出するより良い方法はありますか?

ありがとうございました。

0 投票する
1 に答える
821 参照

python - Python: difflib で SequenceMatcher を渡すと、「autojunk=False」フラグがエラーになる

Python の difflib パッケージの SequenceMatcher メソッドを使用して、文字列の類似性を識別しようとしています。しかし、私はこのメソッドで奇妙な動作を経験しました。私の問題は、パッケージの「ジャンク」フィルターに関連している可能性があると思います。この問題については、こちらで詳しく説明しています。difflib のドキュメントで説明されている方法で、autojunk フラグを SequenceMatcher に渡すことで問題を解決できると思ったと言えば十分です。

しかし、これにより次のエラー メッセージが表示されます。

autojunk=False フラグを SequenceMatcher に渡す方法を知っている人はいますか? 他の人が提供できる提案に感謝します。

0 投票する
0 に答える
154 参照

python - Python difflib で 2 つのテキストを比較する

ある種のなぞなぞ….ダウンロードしたデータのファイル パスを含む類似のテキスト ファイルが 2 つあり、自動化された定期的なプロセスの一部としてダウンロードしたいデータのファイルがもう 1 つあります。ただし、新しいファイル (テキスト 2 に含まれ、テキスト 1 には含まれていない 3 つのセット) のみをダウンロードしたいと考えています。Python で difflib を使用して 2 つのテキストを比較し、効果的に相違させて、融合した相違のみを含む 3 番目のテキストを生成する方法はありますか? よろしくお願いします。チェイスCB

////////テキスト 1///旧///

/Users/MacBookPro15/1.txt

/Users/MacBookPro15/2.txt

/Users/MacBookPro15/3.txt

////テキスト 2//////New///

/Users/MacBookPro15/1.txt

/Users/MacBookPro15/2.txt

/Users/MacBookPro15/3.txt

/Users/MacBookPro15/4.txt

/Users/MacBookPro15/5.txt

/Users/MacBookPro15/6.txt

///私が欲しいもの////差別化

/Users/MacBookPro15/4.txt

/Users/MacBookPro15/5.txt

/Users/MacBookPro15/6.txt

0 投票する
5 に答える
6456 参照

python - あいまい一致のパフォーマンスが向上しますか?

現在、 difflibのメソッド get_close_matches メソッドを使用して、15,000 文字列のリストを反復処理し、約 15,000 文字列の別のリストに対して最も近い一致を取得しています。

値ごとに 0.58 秒かかります。これは、ループを完了するのに 8,714 秒または 145 分かかることを意味します。より高速な別のライブラリ/メソッド、またはこのメソッドの速度を向上させる方法はありますか? 両方の配列を小文字に変換しようとしましたが、速度がわずかに向上しただけでした。

0 投票する
1 に答える
2101 参照

python - 最初の答えが正しくない場合、difflib.get_close_matches はリスト内の名前をスローします

これは、以前の質問hereの更新版です。get_close_matches の名前が必要な人の名前ではない場合、最も近い一致を破棄して関数を再実行し、2 番目に近い一致を取得するコードを追加しています (関数がスローするため、最初に最初の試合でアウト)。

これをより良く書く方法について何かコメントはありますか? そして仕事。>.>

これが私がこれまでに持っているものです:

リスト内の名前が不足しているためのエラー:

名前のリストには、それらをすべて削除しても名前がなくなるため、グローバル変数「userAnswer」は未定義になることを意味することを理解しています。