检查字符串缩进?

Dhr*_*vil 4 python lint analysis indentation

我正在为一系列字符串构建分析器.我需要检查每条线的缩进量(通过制表符或空格).

每行只是文本编辑器中的一个字符串.如何检查字符串缩进多少?

或者更确切地说,也许我可以检查一个字符串之前有多少空格或\ t,但我不确定如何.

小智 16

要计算字符串开头的空格数,您可以在左侧剥离(删除空白)字符串与原始字符串之间进行比较:

a = "    indented string"
leading_spaces = len(a) - len(a.lstrip())
print(leading_spaces) 
# >>> 4
Run Code Online (Sandbox Code Playgroud)

选项卡缩进是特定于上下文的......它会根据显示选项卡字符的任何程序的设置而更改.此方法仅告诉您空白字符的总数(每个选项卡将被视为一个字符).

或者说明:

a = "\t\tindented string"
leading_spaces = len(a) - len(a.lstrip())
print(leading_spaces)
# >>> 2
Run Code Online (Sandbox Code Playgroud)

编辑:

如果您想对整个文件执行此操作,您可能需要尝试

with open("myfile.txt") as afile:
    line_lengths = [len(line) - len(line.lstrip()) for line in afile]
Run Code Online (Sandbox Code Playgroud)


mar*_*eau 8

我认为Gizmo的基本思想是好的,通过使用字符串对象的expandtabs()方法扩展它来处理任何前导标签和空格的混合是相对容易的:

def indentation(s, tabsize=4):
    sx = s.expandtabs(tabsize)
    return 0 if sx.isspace() else len(sx) - len(sx.lstrip())

print indentation("  tindented string")
print indentation("\t\tindented string")
print indentation("  \t  \tindented string")
Run Code Online (Sandbox Code Playgroud)

最后两个打印语句将输出相同的值.

编辑:我修改它以检查并返回0如果遇到所有选项卡和空格的行.