[ Python ] Space と Tab の変換
Python Cookbook のレシピにあるコードは Space が1つあると 全て Tab に置き換えてしまう。おまけに「いくつ SP が並んでいたら Tab に置き換えるのか」といったことも設定できないなど不便なので 改良してみました。
import re
import string
def SPtoTab( targ_str, space_length = 4, tablen = 4 ):
# sprit targ_str into alternating space and non-space sequences.
str_list = re.split( r"( {"+str(space_length)+r",})" , targ_str.expandtabs( tablen ) )
# keep track of the total length of the string so far
len_so_far = 0
for i, piece in enumerate( str_list ):
this_length = len( piece )
len_so_far += this_length
if piece == '\n':
str_list[ i ] = '\n'
elif piece.isspace() :
# turn each 4 spaces sequences into tab
numblanks = len_so_far % tablen
numtabs = ( this_length - numblanks + tablen -1 ) / tablen
str_list[ i ] = ( '\t' * numtabs + ' ' * numblanks )
return ''.join( str_list )
普段コードを書くときはインデントに Tab を使っているんだけど、スペースでインデントされているコードもあって、そういうのを利用してコードを起こすときとか違和感がすごいんだよね(-_-;)
そんなときSpace を Tab に変換するときに便利かも?
ファイルの読み込みと書き出しも付けた方がいいかな・・・
う~~~ん( ´・ω・`)
2006.06.24 追記
コードのバグを修正。
SPtoTab.py にファイル I/O 機能を追加。
逆に、Tab を Space に置換するスクリプトも作成しました。
こっちの方が使用頻度は高いかも?
こちら( tgz 形式 )
| 固定リンク
この記事へのコメントは終了しました。
コメント