PythonでEUC-JPのファイルを読み込んで正規表現を使う方法

April 30,2019 11:55 PM
Category:[Python]
Tag:[Python]
Permalink

PythonでEUC-JPのファイルを読み込んで正規表現を使う方法を紹介します。

Pythonは2.x系です。

1.問題点

下記の、文字コードがEUC-JPのファイルがあります。

text.txt

テスト1
テスト2
テスト3

このファイルから「テスト2」の部分だけをマッチさせたいので、下記のスクリプトを作ったのですがマッチしません。

#!/usr/bin/env python2
# -*- coding: utf-8 -*-
 
import sys
import codecs
import re
 
path = './test.txt'
f = codecs.open(path, 'r', 'euc_jp')
for line in f:
    result = re.search('テスト2', line)
    if result:
        print line

ということで、PythonでEUC-JPのファイルを読み込んで正規表現を使う方法を紹介します。

2.EUC-JPのファイルを読み込んで正規表現を使う

EUC-JPのファイルを読み込んで正規表現を使うには、search()の第1パラメータにuフラグを与えます。

#!/usr/bin/env python2
# -*- coding: utf-8 -*-
 
import sys
import codecs
import re
 
path = './test.txt'
f = codecs.open(path, 'r', 'euc_jp')
for line in f:
    result = re.search(u'テスト2', line)
    if result:
        print line

これでEUC-JPのファイルで正規表現が使えるようになります。

Comments [0] | Trackbacks [0]

Pythonで正規表現を使う方法

April 24,2019 12:03 AM
Category:[Python]
Tag:[Python]
Permalink

Pythonで正規表現を使う方法を紹介します。

1.問題点

下記のスクリプトを書きました。

#!/usr/bin/env python2
# -*- coding: utf-8 -*-
 
str = 'abc123def'
print str

このスクリプトを修正して、変数strに含まれる数字"123"だけを出力したいのですが、方法が分かりません。

ということで、Pythonで正規表現を使う方法を紹介します。

正規表現の詳細については、ここでは割愛します。

2.Pythonで正規表現を使う

正規表現を使うには次のようにします。

#!/usr/bin/env python2
# -*- coding: utf-8 -*-
 
import re
 
str = 'abc123def'
result = re.search('\d{3}', str)
print result.group()

3.解説

Pythonの正規表現モジュール「re」をインポートします。

import re

パターンに一致するか調べるには、search()を使用します。

result = re.search('\d{3}', str)

フォーマットは次のとおりです。

  • 第1パラメータ:パターン
  • 第2パラメータ:対象の文字列または変数

戻り値のresultには一致結果がはいっています。group()メソッドを使うことでパターンにマッチした内容すべてを返却します。

サンプルでは数字3文字にマッチした"123"が出力されます。

パターンマッチの関数はsearch()の他にmatch()がありますが、これは文字列の先頭がパターンマッチするかを調べるためのものです。

Comments [0] | Trackbacks [0]

ansibleでファイルを書き替える方法

April 18,2019 12:03 AM
Category:[ansible]
Tag:[ansible]
Permalink

ansibleでファイルを書き替える方法を紹介します。

1.はじめに

ansibleでファイルの中身を書き替えたいのですが、方法が分かりません。

ということで、ansibleでファイルを書き替える方法を紹介します。

2.ansibleでファイルを書き替える

ansibleでファイルを書き替えるには、lineinfileモジュールを利用します。

下記にサンプルを示します。すいませんがhostsの部分は適宜直してください。

- hosts: localhost
  become: True
  tasks:
  - name: lineinfile
    lineinfile:
      path: /home/hoge/test.txt
      regexp: '^aaa'
      line: 'bbb'
  • lineinfile:ファイル書き換えのためのモジュール
  • path:書き替え対象のパス・ファイル名(必須)
  • regexp:書き替え前の内容(正規表現)
  • line:書き替え後内容

上記の例は、ファイル/home/hoge/test.txtの行頭が

aaa

という行を

bbb

に書き替えています。

なお、regexpの部分が見つからない場合、lineの内容がファイルの末尾に追加されます。

path、regexp、lineは適宜書き替えてお使いください。

3.ansibleでファイルの特定行を削除する

ansibleでファイルの特定行を削除するには、stateオプションを利用します。

- hosts: localhost
  become: True
  tasks:
  - name: lineinfile
    lineinfile:
      path: /home/hoge/test
      state: absent
      regexp: '^aaa'
  • state:行が存在するか・しないか(削除なので"absent")

これでregexpにマッチする行を削除します。

ちなみに書き替えでstateオプションをつけるのであれば、

      state: present

とします。

ただしデフォルト値がpresentなので、あえて記述する必要はありません。

Comments [0] | Trackbacks [0]
 1  |  2  |  3  |  4  |  5  | All pages