Python difflibを使って2つのWordファイルの変更箇所を表にするプログラムを作成したいと考えています。
2つのWordファイルを比較して変更箇所をリストに格納するところまではできましたが、リスト内の要素を表に埋め込む作業がうまくいきませんでした。
現状と実現したい状態を下記に示します。
python
1import docx 2import difflib 3from docx.shared import Inches 4from docx import Document 5 6text1 = [] 7text2 = [] 8doc_ord = docx.Document('吾輩は猫である_Ver1.docx') 9 10for para1 in doc_ord.paragraphs: 11 text1.extend(para1.text.split('。')) 12 13doc_new = docx.Document('吾輩は猫である_Ver2.docx') 14for para2 in doc_new.paragraphs: 15 text2.extend(para2.text.split('。')) 16 17g = difflib.unified_diff (text1, text2) 18#gの中身はジェネレーター 19#print(list(g)) このようにリストに値を渡すことができる 20 21 22#変更前の文書を抽出 23lines_ord = [line for line in list(g) if line.startswith('-')] 24 25#変更後の文書を抽出 26lines_new = [line for line in list(g) if line.startswith('+')] 27 28 29 30# ドキュメントのファイル名 31docx_file = '変更対比表.docx' 32# ドキュメント生成 33document = Document() 34# 表の追加 35table1 = document.add_table(rows=10, cols=2) 36 37#表のヘッダー 38heading_cells = table1.rows[0].cells 39heading_cells[0].text = '変更前' 40heading_cells[1].text = '変更後' 41 42# 表に内容を設定 43columns1 = table1.columns[0].cells 44columns2 = table1.columns[1].cells 45 46for item1 in lines_ord: 47 columns1[0].text = str(item1[0]) 48 49for item2 in lines_new: 50 columns2[0].text = str(item2[0]) 51 52document.save(docx_file) 53
print(lines_old)結果
['--- \n', '-\u3000吾輩(わがはい)は猫である', '-何でも薄暗いじめじめした所でニャーニャー泣いていた事だけは記憶している', '-ただ彼の掌(てのひら)に載せられてスーと持ち上げられた時何だかフワフワした感じがあったばかりである', '-そうしてその穴の中から時々ぷうぷうと煙(けむり)を吹く', '-どうも咽(む)せぽくて実に弱った', '-この書生の掌の裏うちでしばらくはよい心持に坐っておったが、しばらくすると非常な速力で運転し始めた', '-胸が悪くなる']
【理想】
+,-を削除した上で、左の列に変更前の文書(lines_ordの中身)、右側に変更後の文書(lines_newの中身)を書き込んでいきたい。
さらに、文書を丸々追加した場合は変更前のセルに「ー」を書き込み、変更後のセルに追加した文書を書き込みたい。現状のコードではズレが生じてしまう可能性がある。また、変更箇所の目標である+,-を削除するコードも必要である。
部分的でも構いませんので、改善法をお持ちの方はご教示いただけますと幸いです。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/07 14:35