Displaying posts tagged with

“expandtabs”

Python食谱-1.15.制表符(Tab)的扩展和收缩

原文作者:Alex Martelli, David Ascher 中文编译:Tony (digitalsatori) 问题 如何将字符串中的制表符(Tab)转换为一定数量的空格,或者反之。 解决方法 将制表符转换为几个空格是经常会碰到的工作,我们可以用Python字符串对象的 expandtabs 方法来轻松完成。因为字符串是‘不可变的’(immutable),这个方法实际上返回一个新的字符串,该字符串是原字符串的修改副本。我们可以将与原字符串绑定的变量重新绑定到新得到的字符串上: mystring = mystring.expandtabs() 以上代码并不改变mystring原本所指定的字符串,而是将mystring重新绑定到了一个 expandtabs 方法返回的新字符串,该新字符串扩展了所有原字符串中的制表符为指定数量的空格。默认情况下,制表符的宽度为8; 你也可以传递一个整数参数给expandtabs来自定义制表符的宽度。 将空格转变为tabs的情况是比较少见的,通常这种情况被称为,Tab的收缩。Python并没有提供一个内置的 unexpand 来处理将空格转换为Tab的任务。但是,我们可以自己写一个函数来完成该任务。对于字符串处理,采用‘分割-处理-再连接‘的方法远比在整个字符串上重复的做转换操作来得快捷: def unexpand(astring, tablen=8): import re # split into alternating space and non-space sequences pieces = re.split(r'( +)', astring.expandtabs(tablen)) # keep track of the total length of the string so far lensofar = 0 [...]

字符串方法expandtabs和制表位(tabstops)

Python的字符串对象的内置方法: expandtabs 可以用来将字符串中的制表符(tab)扩展为若干个空格。默认情况下,一个tab的长度为8个字符的长度, 我们可以在调用 expandtabs 时传递一个整数作为参数,这个整数将作为tab的长度,比如: S.expandtabs(4) 以上的代码就会返回一个新的字符串,将S中的tab扩展为空格,其中tab符号的长度定为4, 比如: >>> '\t\t this\tis test'.expandtabs(4) ' this is test' 可是这里很奇怪的是,为什么this和is当中的tab变成了一个空格了呢? 要理解这个现象就要知道什么是制表位(tabstop)。tabstop顾名思义就是按制表符tab键后光标停留的位置,tabstop在屏幕或纸张或其它媒介上是固定间隔的一些位置,这个间隔的宽度就是tab的长度。比如我们在编辑器中输入三行内容,分别输入'a<TAB>1', ' b<TAB>2', ' c<TAB>3', 结果为: a 1 b 2 c 3 我们可以看到虽然a, b, c的位置并不相同,但1,2,3都停在了相同的制表位。 现在应该就能理解为什么之前的例子中this和is中只有一个空格了: ' this is test' ^ ^ ^ ^ ^ 上面的 ^ 表示制表位,is上的i处在第四个制表位上。 如果你只是要将tab符号替换为等长的空格,而不是上述的“扩展”,你可以使用: >>> '\t\t this\tis test'.replace("\t", " ") ' this [...]