python3修改文件内容_使用python 修改文件内容

做嵌入式时需要把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方法是不把字符串本身替换的,如果要修改字符串本身还需要有个赋值过程。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值