文字列のインデントの変更 〜Python Cook Book〜

複数の行から成る文字列の行頭のスペースを加減して、インデントをそろえた文字列を作るには、

def reindent(s,numSpace):
	spaces = numSpace * ' '
	lines = [spaces + line.strip()
		 for line in s.splitlines()]
	return '\n'.join(lines)

こうすればよい。

相対的なインデントを変えず左端からの距離を変えたいときは、

def numSpaces(s):
	return [len(line)-len(line.lstrip()) for line in s.splitlines()]

def delSpaces(s,numDel):
	if numDel > min(numSpaces(s)):
		raise ValueError,'removing more spaces than there are!'
	return '\n'.join([line[numDel:] for line in s.splitlines() ])

def unIndentBlock(s):
	return delSpaces(s,min(numSpaces(s)))

>>>x = '''    line one
	line two
			line three'''

>>>print unIndentBlock(x)
   line one
line two
		line three

こうする。