您的位置:首页 > 编程语言 > Python开发

使用python 修改文件内容

2015-10-22 12:03 686 查看
   做嵌入式时需要把windows 下的 ads 工程 项目移植到linux 下的gnu项目时候需要做大量重复的修改,比如把

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方法是不把字符串本身替换的,如果要修改字符串本身还需要有个赋值过程。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: