Python修改文件往指定行插入内容的实例


Posted in Python onJanuary 30, 2019

需求:批量修改py文件中的类属性,为类增加一个core = True新的属性

原py文件如下

a.py

class A():
  description = "abc"

现在有一个1.txt文本,内容如下,如果有py文件中的description跟txt文本中的一样,则增加core属性

1.txt

description = "abc"
description = "123"

实现思路:

1.需要遍历code目录下的所有py文件,然后读取所有行数内容保存到lines列表中

2.遍历每个文件的每一行,匹配1.txt中的description,如果匹配中,就返回行号

3.往lines列表中根据行号插入要增加的新属性

4.重新写回原文件,达到修改文件的目的

如果修改成功后,效果应该是这样的

a.py

class A():
  description = "abc"
  core = True

实现代码:

import os

original_folder = 'E:\\code\\'


core_list = []

count = 0

# if the description is in the current line
def isMatchDescription(line_buffer):
  global core_list

  # if not catch the core_list in global, reload it.
  if not core_list:
    with open("./core.txt","r") as f:
      core_list = f.readlines()

  # if match the core description
  for des in core_list:
    if line_buffer.strip() == des.strip():
      return True
  return False



def modifySignatures():
  for dirpath, dirnames, filenames in os.walk(original_folder):
    for filename in filenames:
      modifyFile(os.path.join(dirpath,filename))

def modifyFile(filename):

  global count
  #print "Current file: %s"% filename
  lines = []
  with open(filename,"r") as f:
    lines = f.readlines()
    hit = 0

    # Enume every single line for match the description
    for index, line in enumerate(lines):
      if isMatchDescription(line):
        hit = index
        print hit
        print "Matched file:%s" % filename
        count+=1
    if hit > 0:
      lines.insert(hit-1,'  core = True\n')
    f.close()

  # Write back to file
  with open(filename,"w") as f:
    for line in lines:
      f.write(line)
    f.close()

if __name__ == '__main__':
  modifySignatures()
  print "Modified:%d"%count

代码中的lines.insert(hit-1,' core = True\n')这一行,hit代表目标py文件的description属性的行号,我之前用的是hit+1,但是后面发现有些文件出现了语法错误,原因是py文件中有些description的值太长,导致原文件使用了代码换行符\,如下:

a.py

class A():
  description = "abc\
  aaaaabbbbb"

这样的如果修改后就变成了

class A():
  description = "abc\
  core = True
  aaaaabbbbb"

为了避免这个bug,后面我才改成了hit-1

lines.insert(hit-1,' core = True\n')

这样修改的py文件后就是这样的效果

class A():
  core = True
  description = "abc\
  aaaaabbbbb"

以上这篇Python修改文件往指定行插入内容的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现文件快照加密保护的方法
Jun 30 Python
Python多线程下载文件的方法
Jul 10 Python
Python常用的爬虫技巧总结
Mar 28 Python
python将文本分每两行一组并保存到文件
Mar 19 Python
Python3.5 处理文本txt,删除不需要的行方法
Dec 10 Python
Python 获取指定文件夹下的目录和文件的实现
Aug 30 Python
python代码xml转txt实例
Mar 10 Python
Python过滤掉numpy.array中非nan数据实例
Jun 08 Python
详解Python直接赋值,深拷贝和浅拷贝
Jul 09 Python
OpenCV+python实现膨胀和腐蚀的示例
Dec 21 Python
python 解决微分方程的操作(数值解法)
May 26 Python
python处理json数据文件
Apr 11 Python
python学生管理系统
Jan 30 #Python
selenium+python截图不成功的解决方法
Jan 30 #Python
python列表使用实现名字管理系统
Jan 30 #Python
Python基本socket通信控制操作示例
Jan 30 #Python
Python mutiprocessing多线程池pool操作示例
Jan 30 #Python
Python多线程处理实例详解【单进程/多进程】
Jan 30 #Python
Python读取Pickle文件信息并计算与当前时间间隔的方法分析
Jan 30 #Python
You might like
PHP中的日期及时间
2006/11/23 PHP
小偷PHP+Html+缓存
2006/11/25 PHP
114啦源码(114la)不能生成地方房产和地方报刊问题4级页面0字节的解决方法
2012/01/12 PHP
试用php中oci8扩展
2015/06/18 PHP
适合PHP初学者阅读的4本经典书籍
2016/09/23 PHP
ThinkPHP中Widget扩展的两种写法及调用方法详解
2017/05/04 PHP
js加解密 脚本解密
2008/02/22 Javascript
Javascript学习笔记1 数据类型
2010/01/11 Javascript
兼容ie、firefox的图片自动缩放的css跟js代码分享
2013/08/12 Javascript
JavaScript1.6数组新特性介绍以及JQuery的几个工具方法
2013/12/06 Javascript
JS如何将数字类型转化为没3个一个逗号的金钱格式
2014/01/27 Javascript
jquery分页插件jpaginate在IE中不兼容问题
2014/04/22 Javascript
Jquery之Bind方法参数传递与接收的三种方法
2014/06/24 Javascript
node.js中的fs.lchownSync方法使用说明
2014/12/16 Javascript
jQuery中queue()方法用法实例
2014/12/29 Javascript
JavaScript中用于四舍五入的Math.round()方法讲解
2015/06/15 Javascript
详解JavaScript中基于原型prototype的继承特性
2016/05/05 Javascript
JS中SetTimeout和SetInterval使用初探
2017/03/23 Javascript
JS实现异步上传压缩图片
2017/04/22 Javascript
微信小程序利用co处理异步流程的方法教程
2017/05/20 Javascript
angularJS的radio实现单项二选一的使用方法
2018/02/28 Javascript
基于vue中解决v-for使用报红并出现警告的问题
2018/03/03 Javascript
JavaScript中this关键字用法实例分析
2018/08/24 Javascript
Javascript实现鼠标移入方向感知
2020/06/24 Javascript
[02:09]2018DOTA2亚洲邀请赛TNC赛前采访
2018/04/04 DOTA
解决python写的windows服务不能启动的问题
2014/04/15 Python
python爬虫神器Pyppeteer入门及使用
2019/07/13 Python
解决Python对齐文本字符串问题
2019/08/28 Python
使用Python的networkx绘制精美网络图教程
2019/11/21 Python
Python openpyxl模块原理及用法解析
2020/01/19 Python
python 给图像添加透明度(alpha通道)
2020/04/09 Python
浅析python 动态库m.so.1.0错误问题
2020/05/09 Python
事业单位个人应聘自荐信
2013/09/21 职场文书
职专应届生求职信
2013/11/16 职场文书
2015年政府采购工作总结
2015/05/21 职场文书
创业计划书之干洗店
2019/09/10 职场文书