Python实现批量处理文件的缩进和转码问题
来源:互联网 发布:破解收费辅助软件 编辑:程序博客网 时间:2024/05/22 15:32
最近把很久前的C代码传到Github上的时候,发现全部上百个源文件的代码缩进都变成了8格,而且里面的中文都出现了乱码,所以决定写个程序来批量处理所有文件的格式。这段关于转码的代码可以适用于很多场合,比如Window下默认编码是GBK,而Linux下默认编码是UTF-8,如果两者间传输的文件中出现中文,则需要进行转码。
问题分析
缩进问题是因为在之前使用vc时没有将制符表设置为4个空格,而Github上的Tab键默认显示八格。中文乱码问题是由于vc++使用的是GBK编码。解决思路
1.缩进问题,也就是用空格替换Tab,通过Python程序读取每一行C代码,计算出对应的空格个数,添加到去除首尾空格的源字符串前构成新的一行,然后写入新的文件。
2.乱码问题,根据Python特性,读取一行字符串后,将在内部自动解码(decode)为Unicode形式,只需要在写入时以utf-8进行编码(encode)并输出就可以实现编码的转换。注意Python输入输出的默认编码为cp936(gbk),要在打开文件时指定写入文件的编码格式。
3.程序只需接收原始文件夹的路径,通过递归遍历将目录中所有C文件处理后输出到新的文件夹,新文件夹与源文件夹所在目录相同,且包结构完全相同。
import os, codecs#计算该行应有的缩进空格(考虑Tab和空格混用的情况)def count_space(st): count = 0 if st == '\n': return 0 for ch in st: if ch == '\t': count = count + 4 elif ch == ' ': count = count + 1 else: break return count #处理文件:1.将tab转换成相应个数的空格 2.转化为utf-8编码def process_file(src_path, dest_path): #设置写入的编码方式为utf-8 #或使用open(dest_path, 'w', encoding = 'utf8') with open(src_path, 'r') as fr, codecs.open(dest_path, 'w', 'utf-8') as fw: for line in fr.readlines(): clean_line = line.strip() n_space = count_space(line) i = 0 sp = '' while i < n_space: sp = sp + ' ' i = i + 1 line = sp + clean_line + '\n' fw.write(line)#递归遍历整个目录def travel(src_path, dest_path, item): if not os.path.isdir(src_path): if os.path.splitext(src_path)[1] == item: process_file(src_path, dest_path) #直到遇到相应文件,就进行处理 return if not os.path.isdir(dest_path): #创建对应的目标目录 os.mkdir(dest_path) #层层深入 for filename in os.listdir(src_path): travel(os.path.join(src_path, filename), os.path.join(dest_path, filename), item)if __name__ == '__main__': src_root = 'C:\\Users\\Administrator\\Desktop\\C-Primer-Plus' #接收要处理的文件夹(这里直接指定) dest_root = src_root + '-new' item = '.c' travel(src_root, dest_root, item)
阅读全文
0 0
- Python实现批量处理文件的缩进和转码问题
- python的缩进问题!
- vim 批量处理缩进
- Python 批量处理文件
- Python 的缩进和冒号
- Python 文件重命名批量处理
- 代码缩进的简易实现(Python实现)
- Python语言代码缩进的问题
- Python 缩进问题
- python中的缩进问题
- Python缩进问题
- python中的缩进问题
- python 解析xml,并修改,插入标签。以及出现ns0的问题,和缩进问题。
- UE和SI的代码缩进问题
- preparedStatement实现批量处理及Oracle数据库中“;”的问题
- Python代码块批量添加Tab缩进
- Python实现批量执行同目录下的py文件
- python批量处理图片命名问题
- 6.5抽象类
- linux lsof详解
- 我认为是最简单的c++实现线性表中链表相关过程
- QT使用OPENGL的心得
- Spring下载各版本jar包
- Python实现批量处理文件的缩进和转码问题
- 先码后看 Tomcat怎么启动容器的——Boostrap篇 侵立删
- Linux安装最优方法
- java 中的管理项目注释TODO FIXME XXX
- 浅谈 Spring 框架注解的用法分析
- 通过cmd连接数据库时报错协议适配器错误
- 小学奥数思维训练题(十二)
- 中介者模式
- 设计模式——责任链模式