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实现过滤单个Android程序日志脚本分享
Jan 16 Python
Python字典操作简明总结
Apr 13 Python
Python的shutil模块中文件的复制操作函数详解
Jul 05 Python
利用Celery实现Django博客PV统计功能详解
May 08 Python
基于python(urlparse)模板的使用方法总结
Oct 13 Python
自适应线性神经网络Adaline的python实现详解
Sep 30 Python
jupyter 实现notebook中显示完整的行和列
Apr 09 Python
Keras 使用 Lambda层详解
Jun 10 Python
python怎么判断素数
Jul 01 Python
calendar在python3时间中常用函数举例详解
Nov 18 Python
用python实现一个简单的验证码
Dec 09 Python
python pillow库的基础使用教程
Jan 13 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向socket服务器收发数据的方法
2015/01/24 PHP
Laravel 5 框架入门(一)
2015/04/09 PHP
PHP获取指定时间段之间的 年,月,天,时,分,秒
2016/06/05 PHP
php实现HTML实体编号与非ASCII字符串相互转换类实例
2016/11/02 PHP
php使用ftp实现文件上传与下载功能
2017/07/21 PHP
Ubuntu 16.04中Laravel5.4升级到5.6的步骤
2018/12/07 PHP
Jquery + Ajax调用webService实例代码(asp.net)
2010/08/27 Javascript
使用JavaScript判断图片是否加载完成的三种实现方式
2014/05/04 Javascript
IE8兼容Jquery.validate.js的问题
2016/12/01 Javascript
jQuery插件zTree实现获取当前选中节点在同级节点中序号的方法
2017/03/08 Javascript
layui框架中layer父子页面交互的方法分析
2017/11/15 Javascript
js实现web调用摄像头 js截取视频画面
2019/04/21 Javascript
基于Vue 撸一个指令实现拖拽功能
2019/10/09 Javascript
koa中间件核心(koa-compose)源码解读分析
2020/06/15 Javascript
Vue路由切换页面不更新问题解决方案
2020/07/10 Javascript
JavaScript常用工具函数库汇总
2020/09/17 Javascript
Javascript柯里化实现原理及作用解析
2020/10/22 Javascript
微信小程序入门之绘制时钟
2020/10/22 Javascript
JS画布动态实现黑客帝国背景效果
2020/11/08 Javascript
[01:22]DOTA2神秘商店携大量周边降临完美大师赛
2017/11/07 DOTA
浅析python 内置字符串处理函数的使用方法
2014/06/11 Python
Python爬取国外天气预报网站的方法
2015/07/10 Python
在centos7中分布式部署pyspider
2017/05/03 Python
浅谈Python实现2种文件复制的方法
2018/01/19 Python
解决python明明pip安装成功却找不到包的问题
2019/08/28 Python
ASP.NET Core中的配置详解
2021/02/05 Python
HTML5未来发展趋势
2016/02/01 HTML / CSS
美国知名运动产品零售商:Foot Locker
2016/07/23 全球购物
Otticanet美国:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/03/10 全球购物
介绍Ibatis的核心类
2013/11/18 面试题
素质拓展感言
2014/01/29 职场文书
求职信模板
2014/05/23 职场文书
教育专业毕业生推荐信
2014/07/10 职场文书
flex弹性布局详解
2022/03/20 HTML / CSS
简单聊聊TypeScript只读修饰符
2022/04/06 Javascript
Android Canvas绘制文字横纵向对齐
2022/06/05 Java/Android