使用python 修改文件内容
2015-10-22 12:03
686 查看
做嵌入式时需要把windows 下的 ads 工程 项目移植到linux 下的gnu项目时候需要做大量重复的修改,比如把
修改为
如果用手工一个个修改很浪费时间,所以就用python脚本来做这些工作,发现很容易就搞定了(以前遇到类似问题总是用c代码来写,代码量很多而且容易出错!!)
源代码如下:
用一个文件 2440init.s 来测试下:
最终生成的文件2440init1.s 内容如下所示:
前面既然说了是替换文件的内容,那么ffrom 跟 fto 打开的应该是同一个文件,但是发现写文件输出流打开后,会自动清空文件(append模式除外) 貌似和java表现一样的。
可以尝试首先读方式打开,读到缓冲区里面,关闭文件。然后再写方式打开,代码如下
如果一个比较大的工程文件,需要遍历工程中的每一个文件。
上面的
函数split 用途是把一个字符串分割开来,比如一个字符串
如果只是简单的替换可以用replace函数,比如把
注意到replace方法是不把字符串本身替换的,如果要修改字符串本身还需要有个赋值过程。
ABC EQU 1
修改为
#define ABC 1
如果用手工一个个修改很浪费时间,所以就用python脚本来做这些工作,发现很容易就搞定了(以前遇到类似问题总是用c代码来写,代码量很多而且容易出错!!)
源代码如下:
def func(): ffrom=open("2440init.s","r") fto=open("2440init1.s","w") while True: l = ffrom.readline() if not l: break if 'EQU' in l: temp = l.split("EQU") temp1 = '#define ' + temp[0] + temp[1] #print temp1 fto.write(temp1) else: temp1 = l fto.write(temp1) if __name__ == "__main__": func()
用一个文件 2440init.s 来测试下:
abc EQU 1 pds EQU 9
最终生成的文件2440init1.s 内容如下所示:
#define abc 1 #define pds 9
前面既然说了是替换文件的内容,那么ffrom 跟 fto 打开的应该是同一个文件,但是发现写文件输出流打开后,会自动清空文件(append模式除外) 貌似和java表现一样的。
可以尝试首先读方式打开,读到缓冲区里面,关闭文件。然后再写方式打开,代码如下
def func(): input = open("2440init.s") lines = input.readlines() input.close() output = open("2440init.s",'w'); for line in lines: #print line if not line: break if 'EQU' in line: temp = line.split("EQU") temp1 = '#define ' + temp[0] + temp[1] output.write(temp1) else: output.write(line) output.close() if __name__ == "__main__": func()
如果一个比较大的工程文件,需要遍历工程中的每一个文件。
import os def direc(): for d,fd,fl in os.walk('/dir to/gun-ucos'): for f in fl: sufix = os.path.splitext(f)[1][1:] if ( (sufix == 'h') or (sufix == 'c') ): #print sufix func(d + '/' + f)
上面的
for d,fd,fl in os.walk('/dir to/gun-ucos')执行完毕之后 fl 为包含文件名的列表,d为目录。然后再通过 splitext 函数获取扩展名。
函数split 用途是把一个字符串分割开来,比如一个字符串
SKY_REGION_DLGTPL执行
split('DLGTPL')之后就会变成一个列表
['#ifndef SKY_REGION_', '\n']
如果只是简单的替换可以用replace函数,比如把
SKY_REGION_DLGTPL替换为
SKY_REGION_DHRU
if ('SKY_REGION_DLGTPL' in line) : line = line.replace('DLGTPL','DHRU')
注意到replace方法是不把字符串本身替换的,如果要修改字符串本身还需要有个赋值过程。
相关文章推荐
- Python -- OOP高级 -- 元类
- python的easy_install安装指南
- Python -- OOP高级 -- 枚举类
- Python -- OOP高级 -- 定制类
- 使用python对url编码解码
- python使用中 第三方库引用路径的问题
- Python 列表 list 数组 array 常用操作集锦
- Python Flask设计Restful
- python2.7安装requests步骤(接口测试)
- Python -- OOP高级 -- __slots__、@property
- python基础
- 多线程实例2
- python python python的魔法函数~还有属性~
- 多线程实例1
- python异常以及面向对象编程
- Gensim Tutorials(一)
- python(4)正则表达式
- Python数据类型详解
- python交互模式下cp65001异常
- python urllib BeautifulSoup抓取去哪儿网站景点部分信息