「CSVのデータを比較について【行の追加と空白】」(SO)を参考に,winmergeとonline_awkでやってみた。


(オリジナルポスト)
「CSVのデータを比較について【行の追加と空白】」　＜　スタック・オーバーフロー

#winmergeの入力データ
csvデータ①

    A,B,C,
    1,アメリカ,○,
    ,カナダ,×,
    3,日本,×,
    ,イタリア,〇,
    5,イギリス,□,
    ,,×,

csvデータ②

    A,B,C,
    1,アメリカ,×,
    2,カナダ,○,
    3,日本,○,
    4,タイ,○,
    10,ベトナム,○,
    ,イタリア,〇,
    5,イギリス,□,
    ,,×,
    7,,〇,
    8,,×,
    ,ミャンマ,□,

#winmergeの実行方法と結果

winmerge＞表示(V)＞Diffコンテキスト(D)＞0行

    1,アメリカ,○,   1,アメリカ,×,
    ,カナダ,×,      2,カナダ,○,
    3,日本,×,       3,日本,○,
                     4,タイ,○,
                     10,ベトナム,○,
                     7,,〇,
                     8,,×,
                     ,ミャンマ,□,




#online awkの実行方法と結果
https://awk.js.org/


Command line (--help):

```
'BEGIN{FS=",";OFS=","} {gsub(/ /,"")}NF==4{print $1,$2,$3 "→追加された行★★★" }NF==7{print $4 ,$5 ,$6 " →"  "\"" $3 "\"" "→"  "\"" $6 "\"" "★★★" }'
```

STDIN:

    1,アメリカ,○,   1,アメリカ,×,
    ,カナダ,×,      2,カナダ,○,
    3,日本,×,       3,日本,○,
                     4,タイ,○,
                     10,ベトナム,○,
                     7,,〇,
                     8,,×,
                     ,ミャンマ,□,

STDOUT | STDERR:

    1,アメリカ,× →"○"→"×"★★★
    2,カナダ,○ →"×"→"○"★★★
    3,日本,○ →"×"→"○"★★★
    4,タイ,○→追加された行★★★
    10,ベトナム,○→追加された行★★★
    7,,〇→追加された行★★★
    8,,×→追加された行★★★
    ,ミャンマ,□→追加された行★★★



最終保存2021/02/27
# ついでにwinmergeで、コードと回答を比較してみた。
winmergeの画像では、ありません。テキストの左右配置です。右にスクロールが必要です。

```python
コード                                                                                    1 件の回答

import csv                                                                               import csv
import pandas as pd                                                                      import pandas as pd

#差分抽出方法のコード                                                                      #差分抽出方法のコード

#ファイルの読み込み                                                                        #ファイルの読み込み
df1 = pd.read_csv("test1.csv",encoding='utf_8_sig')                                      df1 = pd.read_csv("test1.csv", dtype=str, na_filter=False, encoding='utf_8_sig')
df2 = pd.read_csv("test2.csv",encoding='utf_8_sig')                                      df2 = pd.read_csv("test2.csv", dtype=str, na_filter=False, encoding='utf_8_sig')

#ファイルの比較                                                                            # tuple に変換してから差分を取得
df3 = pd.concat([df1.iloc[df1.compare(df2[:len(df1)]).index],df2[len(df1):]])            df3 = df2[~df2.apply(tuple, 1).isin(df1.apply(tuple, 1))]

#特定の文字を検索                                                                          #特定の文字を検索
df_h = df3[df3["C"].str.contains("○|×|□",na=False)].reset_index(drop=True)               df_h = df3[df3["C"].str.contains("○|×|□")].reset_index(drop=True)
pd.set_option('display.unicode.east_asian_width', True)                                  

#ファイル書き込み                                                                          #ファイル書き込み
df_h.to_csv("test.csv",encoding='utf_8_sig',index=False)                                 df_h.to_csv("test.csv", encoding='utf_8_sig', index=False)

                                                                                         pd.set_option('display.unicode.east_asian_width', True)
                                                                                         print(df_h)
```