字符串方法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    is test'

3 Responses to “字符串方法expandtabs和制表位(tabstops)”

  1. [...] 字符串方法expandtabs和制表位(tabstops) 标签数据导入 caching capitalize closure eTiny expandtabs File system find generator [...]

  2. 新手 说道:

    关于expandtabs(),我按照您的例子在shell里运行后,结果跟您的不一样

    ‘\t\t this\tis test.”.expandtabs(4)
    得到:
    this is test. # ‘this’ 与’is’之间并没有单个空格出现,而是expandtabs(4)起了作用

    请问此问题出的那里,我用的版本是V2.5.4

  3. 新手 说道:

    编辑器的原因,前边应该是8空格,this 与 is之间是4空格,请不吝赐教,谢谢

Leave a Response