2つのテキストファイルA、Bを指定すると、AのBの行番号を取得する簡単な方法は何ですか?私はdifflibがあります見ますが、行番号変更された行番号を取得する
答えて
difflibはあなたが必要なものを与えることができます。想定します。このような
this
is
a
bunch
of
lines
this
is
a
different
bunch
of
other
lines
B.TXTコードA.TXT
:
:import difflib
fileA = open("a.txt", "rt").readlines()
fileB = open("b.txt", "rt").readlines()
d = difflib.Differ()
diffs = d.compare(fileA, fileB)
lineNum = 0
for line in diffs:
# split off the code
code = line[:2]
# if the line is in both files or just b, increment the line number.
if code in (" ", "+ "):
lineNum += 1
# if this line is only in b, print the line number and the text on the line
if code == "+ ":
print "%d: %s" % (lineNum, line[2:].strip())
は次のように出力を提供します
[email protected] ~/temp:python diffy.py
4: different
7: other
また、difflibコード"? "
を見て、それをどのように処理したいかを見てみましょう。
ありがとう!ところで、これは1ベースだから、fileBから行を修正するには、lineNum-1 –
そう、それは1ベースとして正しく動作するはずです。それは印刷される前にインクリメントされます。右? – bgporter
貧乏人のソリューション取得するためのインタフェースが表示されません。
with open('A.txt') as f:
linesA = f.readlines()
with open('B.txt') as f:
linesB = f.readlines()
print [k for k, v in enumerate(linesB) if not v in linesA]
これは二次ランタイムを持ち、行の順序を尊重しません。 Aの行が「1」、「2」、「3」、Bの行が「1」、「2」、「3」、「2」であり、コードが出力を生成しないとします。また、Aの中に* not *という行があるかどうかを尋ねる質問にも注意してください。 –
Aにはない行を要求すると良いキャッチがあります。はい、ランタイムはかなり悪いので、貧しい人のソリューションです。そして、はい、このコードは行の順序を尊重しないというのも良い点です。 –
- 1. テーブルビューでドラッグされた行の行番号を取得
- 2. 関数が返される行番号を取得する
- 3. 行番号と列番号で値を取得する
- 4. 行番号が変更されたセルの製品
- 5. DataGridViewの行番号を取得する
- 6. Monaco Editor行番号を取得する
- 7. 取得行番号(MySQLの)
- 8. gitコミットの範囲から追加され更新された行番号のリストを取得するには?
- 9. ネストされたループ内の反復番号を取得する
- 10. テーブルに挿入または更新された番号を取得
- 11. application.yml番号プロパティが変更され
- 12. 取得番号
- 13. 変更番号++
- 14. ファーストチャンス例外の行番号を取得
- 15. スタックトレースで行番号を取得
- 16. Xcodeのエラーの行番号を取得
- 17. DAX - 現在の行番号を取得
- 18. Rデータフレームの行番号を取得
- 19. powershell、foreach、行番号を取得
- 20. 変数が変更される関数と行番号を見つける
- 21. UPDATE SQLite、影響を受けた変更された行の番号を取得する方法(見つかった一致する行ではない)
- 22. コミットの変更された行の順番を変更
- 23. 接続された[Android] PhoneのIMEIとシリアル番号を取得
- 24. エラー行番号に基づいてXMLレコード番号を取得するC#
- 25. jqGridで行番号ごとにページ番号を取得する方法
- 26. main.xmlの変更された順番、今すぐClassCastExceptionを取得しました
- 27. vbscriptを実行するとインシデント参照番号が取得されない
- 28. buildnumber-maven-pluginで最後に変更されたsvnリビジョン番号を取得します。
- 29. 与えられた行番号でXMLノードを取得する方法
- 30. sqlでコード化された行番号
あなただけではありません、ファイルBの行を探しています(また、実際のコードでは、ファイルがなどなどなど、閉じられ得ることを確認するためにコンテキストマネージャを使用したいと思いますか)?ラインの順序は重要ですか? –
difflibはあなたに[統一された差分]を与えることができます(http://docs.python.org/library/difflib.html#difflib.unified_diff)。 [これらのフォーマット](http://en.wikipedia.org/wiki/Diff#Unified_format) '@@ -l、s + l、s @@'は、削除された行の数、開始行、行数追加、開始行。 –
はい、順序は重要ですが、difflibはすでにインテリジェントdiff'ingを実装しています。行番号の部分ではありません –