【发布时间】:2019-02-08 22:14:48
【问题描述】:
我正在编写一个与将代码注入 Python 代码并重新编译有关的工具。
我需要能够检测给定的源文件(或其中的函数)是否使用空格或制表符作为缩进符号。有没有简单的方法?
【问题讨论】:
-
你看tabnanny了吗?
标签: python metaprogramming indentation
我正在编写一个与将代码注入 Python 代码并重新编译有关的工具。
我需要能够检测给定的源文件(或其中的函数)是否使用空格或制表符作为缩进符号。有没有简单的方法?
【问题讨论】:
标签: python metaprogramming indentation
您可以尝试通过换行符解析文档而不进行修剪,然后检查每一行是否以空格或制表符开头,然后在检测到任何一个时立即退出?例如:
re.match(' ', line): -> space
re.match('\t', line): -> tab
或者,您可以使用startwith() 方法 - 在循环中运行它并在检测到行首的制表符或空格时立即退出:
' foo'.startswith(('\s'))
True
' foo'.startswith(('\t'))
True
我认为可能存在的问题是文件是否使用制表符,但有人在输入注释 (#) 之前按下了空格 - 但我想检测 cmets 并忽略这些应该不难。
【讨论】:
re.match(r'\s', line) 实际上也匹配选项卡。只需将空格写为文字空格' ' 并将制表符写为文字制表符' ' 或'\t'(不是r'\t')。