« [ Python ] Python 2.5 beta1 released | トップページ | [ sysadmin] 起動しない XP を高速で復旧する方法 »

2006/06/23

[ 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 )

ファイルはこちら ( tgz形式 )

普段コードを書くときはインデントに Tab を使っているんだけど、スペースでインデントされているコードもあって、そういうのを利用してコードを起こすときとか違和感がすごいんだよね(-_-;)

そんなときSpace を Tab に変換するときに便利かも?
ファイルの読み込みと書き出しも付けた方がいいかな・・・
う~~~ん( ´・ω・`)

2006.06.24 追記 コードのバグを修正。
SPtoTab.py にファイル I/O 機能を追加。

逆に、Tab を Space に置換するスクリプトも作成しました。
こっちの方が使用頻度は高いかも?
こちら( tgz 形式 )

|

« [ Python ] Python 2.5 beta1 released | トップページ | [ sysadmin] 起動しない XP を高速で復旧する方法 »

コメント

コメントを書く



(ウェブ上には掲載しません)


コメントは記事投稿者が公開するまで表示されません。



トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/103108/10645399

この記事へのトラックバック一覧です: [ Python ] Space と Tab の変換:

« [ Python ] Python 2.5 beta1 released | トップページ | [ sysadmin] 起動しない XP を高速で復旧する方法 »