Hatena::Grouppython

nelnal@python

2008-01-20

[] 文字列から文字を除去 23:41  文字列から文字を除去 - nelnal@python を含むブックマーク はてなブックマーク -  文字列から文字を除去 - nelnal@python

rstrip

rstrip は文字列右から指定文字を除去するメソッド。

string.rstrip( [ chars ] )

chars
除去したい文字の集合。文字列型で指定すること。

引数を指定しない場合は

  • \t
  • \n
  • \r
  • \v*1
  • \f*2

が除去する文字として扱われる。


サンプルコード

以下の方法は改行コード(win = \r\n, mac = \r, unix = \n)を意識せずに改行を除去して、

実行環境の改行コードで出力(標準出力)する方法。

fh = open("test.txt", "r")

lines = fh.readlines("")
for line in fh.readlines:
    print line.rstrip();

fh.close();

lstrip

lstrip は文字列左から指定文字を除去するメソッド。

string.lstrip( [ chars ] )

引数の使い方は rstrip と同様。

引数が省略された場合は空白文字が除去される。


strip

strip は文字列左右から指定文字を除去するメソッド。

string.strip( [ chars ] )

引数の使い方は rstrip, lstrip と同じ。

引数が省略された場合は空白文字が除去される。


dedent

dedent はインデントを除去するメソッド。

textwrap モジュールに含まれる。

import textwrap

ret = textwrap.dedent( string )

string
インデントを除去したい文字列
(return)
インデントを除去した文字列

サンプルコード

三重引用符のインデントを除去

#!/usr/bin/env python
# coding: utf-8

import textwrap

def test():
    str = """\
    Hello, 
    world!""";
    print str;
    print "-" * 8;
    print textwrap.dedent( str );

if __name__ == '__main__':
    test();

*1:0x000B : 垂直タブ。

*2:0x000C : フォームフィード。紙送り、改行のこと。

トラックバック - http://python.g.hatena.ne.jp/nelnal_programing/20080120

2007-11-27

[] Template 10:33  Template - nelnal@python を含むブックマーク はてなブックマーク -  Template - nelnal@python

Python の version 2.4 から Template という仕組みが追加されている(stringモジュール内)。

Template とは以前からある %*1 による置き換えではなく、

辞書型(dict)のキー、もしくは辞書に類似した仕組みを要素として使った置き換えをする仕組みである。

プレースホルダ

Template の仕組みを使って置き換える対象となる文字列のことです。IDとも言います。

プレースホルダ名には以下のルールがあります。

  • プレースホルダ名の開始は"$"で示される。
  • 先頭文字は以下の何れかで構成されていること。
  • 2文字目以降の文字列は以下の何れかで構成されていること。
    • アンダースコア(_)
    • 英小文字
    • 数字
  • プレースホルダ名の終端は以下の何れかで判定する。
    • プレースホルダ名が {} で囲まれている場合は、} が終端を示す。
    • {} で囲まれていない場合、プレースホルダ名の構成ルールに当てはまらない文字の直前を終端とする。

プレースホルダ名 : 例
プレースホルダ可否
$data
$sum_sold
$_name
$Sample
$/src/×
$(dst)×

$name をIDとして使う場合

プレースホルダ + 文字列可否
data$name
$name's book
$nametype×
${name}type

substitute と safe_substitute

Template クラスでは substitute と safe_substitute という2つのメソッドを持つ。

Template_Instance.substitute( dictionary )

Template_Instance.safe_substitute( dictionary )

Template_Instance
Templateクラスのインスタンス
dictionary
プレースホルダ名をキーに持つ辞書型(もしくは辞書に類似した要素)

2つのメソッドの違いはプレースホルダを置き換えられなかった場合の動作の違いです。

プレースホルダを置き換えられない場合
substitute, safe_substitute の引数のデータ内にプレースホルダ名をキーに持つ要素が無い場合のこと。
  • substitute の場合、ValueError の例外を raise します。
  • safe_substitute の場合、プレースホルダ名がそのまま使用します。

サンプルコード

#!/usr/bin/env python
# coding: utf-8

import string;

tmp = string.Template( "I'm ${name}.  I'm from ${country}." );

print tmp.substitute( { 'name': 'NelNal', 'country': 'Tokyo' } );
print tmp.substitute( { 'name': 'Chan', 'country': 'China' } );
print tmp.substitute( name='Tom', country='America' );

*1:"print (This is %s) % 'pen'" の様な置き換え

*2:Templateクラスを使ってみた範囲では英大文字も使えるようだが

znecmbxepjznecmbxepj2011/03/15 15:014XYYqi <a href="http://ohjbqaxnlefg.com/">ohjbqaxnlefg</a>, [url=http://mcqlibjkhqac.com/]mcqlibjkhqac[/url], [link=http://jfnobrfbddul.com/]jfnobrfbddul[/link], http://ymbdlbvqqika.com/

トラックバック - http://python.g.hatena.ne.jp/nelnal_programing/20071127