暁の電子工作奮闘記

知識も経験もないのにArduinoとRaspberryPiを買ってしまった大学生が、勉強しながらあれこれ試行錯誤するブログ。

Pythonで特定の文字列を含む行のみを抽出・削除してtxtファイルに書き出し

こんにちは!暁です。

Pythonで特定の文字列を含む行のみを抽出・削除してtxtファイルに書き出すプログラムを書いたので紹介。

具体的に説明すると、
・あるtxtファイル(input.txt)を読み込み、
・"特定の文字列を含まない"かつ"特定の文字列を含む"行を
・別のtxtファイル(output.txt)に書き出す
ためのプログラムです。

除外したい文字列と含んでほしい文字列はどちらも複数個指定可能、
片方のみ設定することも可能です。

# delLine.py

inputFile = "input.txt"     # 読み込みファイル
outputFile = "output.txt"   # 書き込みファイル

containWord = [ここに"含んでほしい文字列群リスト"を入力]    
NGWord = [ここに"除外したい文字列群リスト"を入力]    

for line in open(inputFile):
    # 行中にNGWordを含むか判別
    for i in NGWord:
        if i in line:
            break
    else:
        # 行中にcontainWordを含むか判別
        for i in containWord:
            if i not in line:
                break  
        else:
            # NGWordを含まないかつcontainWordを含む場合、
            # 書き込みファイルの末尾にその行を追加
            with open(outputFile, mode='a') as f:
                f.write(line)

使うときは6, 7行目を書き換えてください。

(例1) "0"を含む行を除外したい場合

containWord = []    
NGWord = ["0"]    

(例2) "a"または"b"または"c"を含む行を除外したい場合

containWord = []    
NGWord = ["a", "b", "c"]    

(例3) "!"と"?"をどちらも含む行のみ抽出したい場合

containWord = ["!", "?"]   
NGWord = []    

(例4) "はてな" を含むかつ "ブログ" を含まない行のみ抽出したい場合

containWord = ["はてな"]   
NGWord = ["ブログ"]    


読み込みたいファイル名を"input.txt"として
delLine.pyと同じフォルダにinput.txtをおいた状態で

python delLine.py

を実行してください。

読み込みファイルに漢字やひらがながある場合は、
読み込みファイルをShift-JISで保存する必要があるかも?
書き込みファイルが文字化けしてたらこちらもShift-JISで保存し直しましょう。

参考にしたサイト
Pythonのfor文によるループ処理(range, enumerate, zipなど) | note.nkmk.me
指定した文字列を含む行を出力 - Qiita