このブログを検索

ラベル 正規表現 の投稿を表示しています。 すべての投稿を表示
ラベル 正規表現 の投稿を表示しています。 すべての投稿を表示

2021/07/05

pythonでexcelファイルの正規表現置換をする

 excelの内容を正規表現で置換したかった。

ある列に、数字をカンマで区切った内容を入れてあるのだが、

最後がカンマで終わっている場合、カンマを取りたい。


たとえば、


123, 124, 222, 234

333, 444, 555, 666,

111, 222, 333


みたいな場合、2行目の666, のカンマをとって

333, 444, 555, 666

としたい。


pythonの正規表現は使ったことがあり、

最初は

resut = pattern.match(",$",s1)

という風にしたのだが、なぜかマッチしない。

findallを使ったらマッチした。


置換はもっとスマートな方法があるかもしれないが、

最後の一文字を落とす、という風にした。


###########################
import glob
import os
import openpyxl
import re
import sys


pattern = re.compile('.*,')


bookname = sys.argv[1]

newbook = sys.argv[2]

wb = openpyxl.load_workbook(bookname,data_only=True)

ws = wb[u"Sheet1"]

#print(ws.cell(row=1, column=1).value)


for row in range(1000):
	c1 = ws.cell(row=row+1, column=9)
	if c1.value is None:
		pass
	else:
		s1 = str(c1.value)
		result = re.findall(r",$",s1)
		if result:
			print(str(s1[:len(s1)-1]))
			s2 = str(s1[:len(s1)-1])
			c1.value = s2

wb.save(newbook)
wb.close
##################################

列は9列目(「I列」)を固定で指定。

ファイル名と保存ファイル名は引数で指定

python rep.py filename1 filenmae2

2012/12/09

sedで一括置換できない

わけあって、以下のような置換をそこそこたくさんのファイルについて実行しなければならなかった。

%s/\n<br>/<br>/g


viで一個ずつ置換していたのだが、sedでやれば一括でできるだろうとやってみたが、できない。

sed -i -e 's/\\n<br>/<br>/g'


なんでだろう?

まあ、たいした数ではなかったので、一個ずつviで開いて置換をしていった。




2008/02/22

htmlタグの置換

最近秀丸で正規表現による検索や置換をするようになってきたのだが、ひとつわからないことがある。多分、簡単にできる方法があると思うので、メモしておく。たとえば、htmlタグの閉じるタグ、なんと呼ぶのかわからないが、
</div>とか、</a>とかいうタグ。

このタグがあったら、その後ろで改行したいというとき。検索するのは、 </.*> とやればよい。しかし、それを置換するときに、</.*>\n とすると、.*の部分を検索対象文字列に置き換えてはくれない。
・・・わかりました。
検索:(</.*>)
置換:\1\n

\1というのは、()で囲った検索内容を変数とするものです。複数あれば、\1,\2...と使えます。yy/mm/ddを yy年mm月dd日に置換するような場合に使います。これは便利だ。多分viとかでも同様のやり方があるはず。
...
\1とかはlinuxも同じだ、と思ったら、</.*>がうまくいかない。1回目はうまくいくが、連続すると/なしの普通のタグが引っかかってしまう。

2008/02/08

秀丸とvi

パソコンについては、何かをしたいからそのために必要なものを買う、ということよりも、とりあえず買ってみて、何ができるんだろうと模索するところがある。オタクと違うのは、ただ高性能を追求するのではなく、最終的には道具として使用するところである。

わたしはログファイルなどを検索したり置換したりするときはいつも秀丸を使っていたのだが、何万行もあるログから、その半分くらいの行を置換したときに、高速化しても20分くらいたっても終わらなかった。行頭が特定の文字+:で始まる行を削除しようとして、下記のような正規表現を指定した。

^ETHER:.*

時間がかかりすぎるので中断して、cygwinのviでやってみたら、数秒程度で終わった。

秀丸の弱点はほとんどないと思っていたのだが、これは意外だった。正規表現処理が遅いのだろうか?

viはとっかかりは悪いが使い込めばなんでもできることがわかってくる。