【转】使用python 修改文件内容

原文地址:http://blog.csdn.net/xsckernel/article/details/9007517

由于在一个把ads下的arm 工程项目移植到gnu项目时候需要做大量重复的修改,比如把

[plain] view plaincopyprint?

  1. ABC     EQU 1

修改为:

[plain] view plaincopyprint?

  1. #define     ABC 1

如果用手工一个个修改很浪费时间,所以就用python脚本来做这些工作,发现很容易就搞定了(以前遇到类似问题总是用c代码来写,代码量很多而且容易出错!!)

源代码如下:

[python] view plaincopyprint?

  1. def func():
  2. ffrom=open("2440init.s","r")
  3. fto=open("2440init1.s","w")
  4. while True:
  5. l = ffrom.readline()
  6. if not l:
  7. break
  8. if ‘EQU‘ in l:
  9. temp = l.split("EQU")
  10. temp1 = ‘#define  ‘ + temp[0] + temp[1]
  11. #print temp1
  12. fto.write(temp1)
  13. else:
  14. temp1 = l
  15. fto.write(temp1)
  16. if __name__ == "__main__":
  17. func()

用一个文件 2440init.s 来测试下:

[plain] view plaincopyprint?

  1. abc             EQU             1
  2. pds             EQU             9

最终生成的文件2440init1.s 内容如下所示:

[plain] view plaincopyprint?

  1. #define  abc                            1
  2. #define  pds                            9

前面既然说了是替换文件的内容 ffrom 跟 fto 打开的应该是同一个文件,但是发现 写文件输出流打开后,会自动清空文件(append模式除外) 貌似和java表现一样的。

可以用如下代码完成

[python] view plaincopyprint?

  1. def func():
  2. input   = open("2440init.s")
  3. lines   = input.readlines()
  4. input.close()
  5. output  = open("2440init.s",‘w‘);
  6. for line in lines:
  7. #print line
  8. if not line:
  9. break
  10. if ‘EQU‘ in line:
  11. temp    = line.split("EQU")
  12. temp1   = ‘#define  ‘ + temp[0] + temp[1]
  13. output.write(temp1)
  14. else:
  15. output.write(line)
  16. output.close()
  17. if __name__ == "__main__":
  18. func()

如果一个比较大的工程文件,需要遍历工程中的每一个文件。如果文件中包含指定的字符串比如说 #include "appdef.h"  则将之替换为 #include "datatype.h" :

[python] view plaincopyprint?

    1. import os
    2. def direc():
    3. for d,fd,fl in os.walk(‘/home/shichao/gun-ucos‘):
    4. for f in fl:
    5. sufix = os.path.splitext(f)[1][1:]
    6. if ( (sufix == ‘h‘) or (sufix == ‘c‘) ):
    7. #print sufix
    8. func(d + ‘/‘ + f)
    9. def func(filename):
    10. input   = open(filename)
    11. lines   = input.readlines()
    12. input.close()
    13. output  = open(filename,‘w‘)
    14. for line in lines:
    15. if not line:
    16. break
    17. if ((‘appdef.h‘ in line) and (‘include‘ in line) ):
    18. temp    = line.split("appdef")
    19. temp1   = temp[0] + ‘datatype‘ + temp[1]
    20. output.write(temp1)
    21. else:
    22. output.write(line)
    23. output.close()
    24. if __name__ == "__main__":
    25. direc()
时间: 2024-10-08 15:58:11

【转】使用python 修改文件内容的相关文章

python 修改文件内容

python 修改文件内容 一.修改原文件方式 1 def alter(file,old_str,new_str): 2 """ 3 替换文件中的字符串 4 :param file:文件名 5 :param old_str:就字符串 6 :param new_str:新字符串 7 :return: 8 """ 9 file_data = "" 10 with open(file, "r", encoding

python修改文件内容,不需要read,write多个动作。

python  要修改文件内容,常用 是先read,后write , 再 rename,很不爽. 比如:需要 把       yuv_dir ="../HD/"   # "H:/HD_Master/1080i25/" 改为       yuv_dir ="C:/HD/"   # "H:/HD_Master/1080i25/" 很简单,但实际不好操作,因为read后文件指针就到后一行了,要使用seek到前一行等,很不好. 很多应

python 修改文件内容的程序

#1.修改文件的内容 #运行的时候要 python xxx.py hh.txt hehe hahaimport sys,osinputs = sys.argv#存的是所有运行时候传进来的参数#它就是用来获取在用python命令运行python文件的时候,传入的参数#1.判断用户输入的是不是够个数if len(inputs)<4: print('参数不够,至少需要3个参数,e.g: python xx.py xx.txt old_str new_str..')else: file_name = i

Python修改文件内容

import sys import os name=(sys.argv) #用来存储输入的4个参数 if len(name)<4: #判断输入参数是否小于4个 print('至少传入4个参数') exit() #如果小于4个参数,不往下执行直接退出 f=open('d:/'+name[1],'a+') #以追加方式打开要更改的文件 f1=open('d:/'+name[1]+'.new','w') #同时以写的方式打开一个新文件 f.seek(0) #文件指针指向开头 for line in f

python 文件操作(二) 替换性修改文件内容

正常情况我们想要仅对文件某一行的内容进行修改,而不改变其他内容,在原文件的基础上不能修改,因为当我们对原文件进行写操作时,如果原文件里面有内容,就会清空,在这种情况下,只能对文件进行替换性修改:即重新创建一个文件,把原文件的内容按行复制到新文件里,当复制到要修改的那一行时,就用我们需要的内容来替换原有的内容 eg:我们要修改原文件的第五行内容为"hello,小双双",实现源码如下: # 替换性修改文件内容 f_read = open('小双双', 'r', encoding='utf8

java修改文件内容

文件的读和写,大家都不陌生,但是修改呢?按照普通的读写流去修改的话,只能全部读取出来,在内存中修改好后,全部写进去,这样对于文件内容过多的时,性能很低. 最近在遇到这个问题的时候,发现RandomAccessFile这个类正好能解决我的问题,废话不多说,下面直接贴代码,分享给大家,有不对的地方欢迎指教,谢谢 /**     * 修改文件内容     * @param fileName     * @param oldstr     * @param newStr     * @return  

[转载]sed实现直接修改文件内容

sed实现直接修改文件内容 sed是实现对流的编辑.通常,我们使用sed可以实现内容的编辑后然后保存成另外的一个文件,如果正确的话,才写入到源文件.但是某些时候,我们需要直接修改文件,因为,保存文件到一个文件,然后再覆盖原文件的办法显得很麻烦.其实很简单,只需要一个 -i 参数就可以了.比如,我想替换文件中的 properties 为 property ,可以使用 sed  's/properties/property/g'  build.xml这种方式,其实并没有修改build.xml文件的内

linux下C++修改文件内容

C fwrite在任意位置写入文件,并可修改文件内容 想实现类似迅雷那样下载时可以从文件半中间写入的功能 1 #include<stdio.h> 2 int main() 3 { 4 FILE *fp; 5 fp=fopen("overwrite.bin","rb+"); //使用rb+模式,可以往半中间插入数据,而且是覆盖插入,若使用"ab+"每次都插入到最后面,调用fseek也没用 6 if(NULL != fp) 7 { 8 i

python 修改文件中的内容

在python的文件操作中,是没有办法对文件中具体某行或者某个位置的内容进行局部的修改的,如果需要对文件的某一行内容进行修改,可以先将文件中的所有的内容全部读取出来,再进行内容判断,是否是需要修改的内容,如果是就替换内容,并且将修改替换过的内容和没有修改的内容全部写入到新的文件中. # 打开旧文件 f = open('file_text.txt','r',encoding='utf-8') # 打开新文件 f_new = open('file_text_bak.txt','w',encoding