微信搜索:编程笔记本
微信搜索:编程笔记本
微信搜索:编程笔记本
点击上方蓝字关注我,我们一起学编程
欢迎小伙伴们分享、转载、私信、赞赏
昨天在跟小伙伴聊天,当他谈起自己正在做的项目时,一脸愁容。
他吐槽道:“该项目的 Python 代码库由多个人共同维护。由于每个人使用的编辑器不同,每个人的编码风格也不同,最终导致了代码的缩进千奇百怪:有缩进 2 个空格的,有缩进 4 个空格的,有缩进 8 个空格,有缩进一个 Tab 的,更有缩进随机数量空格的。导致代码的可读性非常差。“
小伙伴还说:“这种长短不一的代码看着非常难受,我就手动将它们全部改成标准四空格缩进了。也考虑过使用自动化脚本,但一时间没什么思路,就搁置了。”
这反映出一个问题:**不同长度的缩进,虽不影响代码解释,但可读性非常差,一律使用标准的四空格缩进是个不错的主意。**于是,我便尝试写一个简单的脚本工具,来解决这个实际问题。
经过简单分析,确定如下思路:
- 由于 Python 的缩进是按照层级进行的,只要下一层缩进比上一层更深,且同一层级的所有代码缩进相同即可;
- 可以逐行对源文件进行处理,对每一行源代码,统计行前空格字符数量,确定该行代码的缩进层级;
- 每嵌套一层缩进,将空格数量增加四位,并记录当前缩进层级;
- 当发现当前行的缩进层级小于上一行代码,则表示当前行已跳出一层或所层嵌套,对记录层级的列表由后至前进行搜索,找到当前行代码对应的缩进层级;
- 对于当前行代码,根据其缩进层级,对其行首添加相应数量的空格。
为了统计每一行源代码前的空格数量,我们使用 行的原始长度 - 删除行左侧空白后的长度 表示。
示例代码如下:
file_input = 'source.py' # file to format
file_output = 'dest.py' # formated file
fin = open(file_input, 'r')
fout = open(file_output, 'w')
space = 0
indent_lists = [0]
for line in fin:
# blank line just output
if len(line.lstrip()) == 0:
fout.write