如何在Python中为文件每行开头添加对应缩进数的制表符?
给Python代码行添加基于大括号层级的缩进
我来帮你搞定这个给代码行添加层级缩进的需求,先梳理下你原代码里的几个小问题,再给你完整的实现方案:
- 变量名笔误:你写的
intent应该是indent(缩进的英文是indent,这样代码可读性更强) - 大括号处理顺序错误:遇到
}时,应该先把缩进值减1,再处理当前行的缩进——不然闭合大括号的行会多一层不必要的缩进 - 文件读写逻辑问题:直接用
r+模式读写容易出现指针混乱,更稳妥的方式是先把所有内容读入内存,修改完成后再重新写入文件
下面是修正后的完整实现代码:
# 读取目标文件的所有内容 with open('file.py', 'r') as f: lines = f.readlines() indent_level = 0 modified_lines = [] for line in lines: # 先处理闭合大括号:闭合行的缩进应该和对应开括号行同层级,所以先减缩进 if '}' in line: indent_level -= 1 # 防止缩进值变成负数(应对文件里多余闭合大括号的情况) indent_level = max(indent_level, 0) # 处理当前行的缩进:先去掉原有缩进避免重复叠加,再添加对应层级的制表符 stripped_line = line.strip() if stripped_line: # 非空行才添加缩进 indented_line = '\t' * indent_level + stripped_line + '\n' else: indented_line = line # 空行保持原样 modified_lines.append(indented_line) # 最后处理打开大括号:下一行的缩进需要加一层 if '{' in line: indent_level += 1 # 将修改后的内容写入文件(覆盖原文件) with open('file.py', 'w') as f: f.writelines(modified_lines)
代码细节说明:
- 用
with语句处理文件,能自动管理文件的打开和关闭,比手动调用open/close更安全 - 区分处理空行和非空行,避免给空行也加上多余缩进
- 加入
max(indent_level, 0)的判断,防止出现负缩进的异常情况 - 读写分离的逻辑,避免了
r+模式下指针位置混乱的问题
内容的提问来源于stack exchange,提问作者Avi Bag
相关产品推荐
相关产品推荐

