Python

diffプログラム

unix の diff コマンドで比較した場合

ファイル aa の内容
555
888
111
333
222

ファイル bb の内容
333
111
444
222

diff コマンドで比較すると
sort していないので 111 も差分が出てしまう
# diff aa bb
1,3d0
< 555
< 888
< 111
4a2,3
> 111
> 444

サンプルコード
#!/bin/env python
# -*- coding: utf-8 -*-

import sys
import os.path

argvs = sys.argv

if (len(argvs) != 3):
        print 'Usage : %s [file1] [file2]' % argvs[0]
        quit()

pkgs=[]   # 2次元配列
for f in argvs[1:]:
        if not os.path.isfile(f):
                print 'File %s Not found.' % f
                quit()

        # ファイルを読み込み、改行コード削除し配列へ格納
        pkgs.append([l.rstrip() for l in open(f).readlines()])

# 多次元配列 0,1 を処理
for i in [0,1]:

        # 配列からデータを取り出し pkg1 に格納
        for pkg1 in pkgs[i]:

                # pkgs[int(not i)] は 比較対象元と逆のindexを指定
                # 1 の場合 0 , 0 の場合1 を指定。
                enumerate は 値に indexを付けてくれる。
                for (x,pkg2) in enumerate(pkgs[int(not i)]):
                        if pkg1 == pkg2:  # 一致する場合は出力しないので break
                                break

                        # 配列の長さとIndex値で最終行を判断し、
                        # 最終行の比較を終えても break していない場合差分があるので出力
                        if len(pkgs[int(not i)])-1 == x:
                                print (['>','<'])[i],pkg1

実行結果

# ./diff.py aa bb
> 555
> 888
< 444
#



先頭へ

      Document-Folder          一覧
HP-UX
HULFT
JAVA
JP1
JavaScript
Linux
MAC
PHP
Perl
Python
Ruby
SOA
Solaris
Unix全般
Windows
XML
エクセル
スタイルシート
セキュリティー
データベース
ネットワーク
パソコン
ブラウザ
プログラム構文
仮想化
          RSS-Folder
ニュース
   アットマーク・アイティ(@IT)
   シンクイット(ThinkIT)
   インターネットコム
   インターネットウォッチ
   日経IT-Pro
   日経パソコン
   CNET Japan
   ZD-NetJapan
   MYCOM
   RBB-Today
ベンダー
   日本IBM
   日本HP
   サンマイクロシステムズ
   NEC
   富士通
   日立
ソフトウェア
   マイクロソフト
   トレンドマイクロ
   オラクル
   サイボウズ
   Mozilla
   野村総合研究所
   (その他ソフトウェア企業)
更新履歴 一覧
 07/08 PERF
プログラム構文
 07/07 PERF
プログラム構文
 06/25 オブジェクトプログラミング2
Perl>サンプル
 07/12 クローン作成
仮想化>vCenter
 07/12 vyatta設定
ネットワーク>vyatta
 07/12 vyattaインストール
ネットワーク>vyatta
 07/12 リポジトリサーバ
Linux>サーバ構築
 07/05 VMwareのインストール
仮想化>VMware
 07/05 PXEブート
仮想化>KVM
 07/01 DHCPでのPXEブート
仮想化>KVM
 06/27 qcow2仮想DISK作成
仮想化>KVM
 06/13 NWの設定
仮想化>VMwareEsxi
 06/13 IPアドレスの変更
仮想化>VMwareEsxi
 06/12 自動ssh
Unix全般>シェル>Bash
 06/12 diffプログラミング
Python
Google