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功能键的读取方法
May 28 Python
python3.6使用pymysql连接Mysql数据库
May 25 Python
Python爬取qq空间说说的实例代码
Aug 17 Python
Python线程同步的实现代码
Oct 03 Python
python中时间模块的基本使用教程
May 14 Python
Django RBAC权限管理设计过程详解
Aug 06 Python
python 实现视频 图像帧提取
Dec 10 Python
python默认参数调用方法解析
Feb 09 Python
Windows下Pycharm远程连接虚拟机中Centos下的Python环境(图文教程详解)
Mar 19 Python
使用Python制作一个数据预处理小工具(多种操作一键完成)
Feb 07 Python
pandas apply使用多列计算生成新的列实现示例
Feb 24 Python
Python入门学习之类的相关知识总结
May 25 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执行速率优化技巧小结
2008/03/15 PHP
分享ThinkPHP3.2中关联查询解决思路
2015/09/20 PHP
PHP通过文件路径获取文件名的实例代码
2018/10/14 PHP
jQuery常用数据处理方法小结
2015/02/20 Javascript
JavaScript面对国际化编程时的一些建议
2015/06/24 Javascript
JQuery移动页面开发之屏幕方向改变与滚屏的实现
2015/12/03 Javascript
Vue2.0 UI框架ElementUI使用方法详解
2017/04/14 Javascript
NodeJs安装npm包一直失败的解决方法
2017/04/28 NodeJs
关于webpack2和模块打包的新手指南(小结)
2017/08/07 Javascript
javaScript日期工具类DateUtils详解
2017/12/08 Javascript
详解Vue单元测试case写法
2018/05/24 Javascript
使用JavaScript实现node.js中的path.join方法
2018/08/12 Javascript
解决在vue项目中webpack打包后字体不生效的问题
2018/09/01 Javascript
微信小程序自定义导航栏
2018/12/31 Javascript
微信小程序实现bindtap等事件传参
2019/04/08 Javascript
Vue+Element实现动态生成新表单并添加验证功能
2019/05/23 Javascript
基于layui内置模块(element常用元素的操作)
2019/09/20 Javascript
IDEA安装vue插件图文详解
2019/09/26 Javascript
js删除指定位置超链接中含有百度与360的标题
2021/01/06 Javascript
用Javascript实现发送短信验证码间隔功能
2021/02/08 Javascript
连接Python程序与MySQL的教程
2015/04/29 Python
Python下载指定页面上图片的方法
2016/05/12 Python
浅谈numpy中linspace的用法 (等差数列创建函数)
2017/06/07 Python
PyCharm+PySpark远程调试的环境配置的方法
2018/11/29 Python
python实现播放音频和录音功能示例代码
2018/12/30 Python
python获取交互式ssh shell的方法
2019/02/14 Python
python中的单引号双引号区别知识点总结
2019/06/23 Python
python中tkinter的应用:修改字体的实例讲解
2019/07/17 Python
Python中flatten( ),matrix.A用法说明
2020/07/05 Python
澳大利亚顶级美发和美容贸易超市:glamaCo
2020/01/19 全球购物
工地资料员岗位职责
2013/12/31 职场文书
新闻编辑自荐书范文
2014/02/12 职场文书
银行职员个人的工作自我评价
2014/02/15 职场文书
2014年小学美术工作总结
2014/12/20 职场文书
2015年感恩父亲节演讲稿
2015/03/19 职场文书
2015年幼儿园班务工作总结
2015/05/12 职场文书