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 相关文章推荐
2款Python内存检测工具介绍和使用方法
Jun 01 Python
用Python编写脚本使IE实现代理上网的教程
Apr 23 Python
Python cookbook(数据结构与算法)将多个映射合并为单个映射的方法
Apr 19 Python
python实现简单登陆流程的方法
Apr 22 Python
关于Python的一些学习总结
May 25 Python
Python爬虫包BeautifulSoup实例(三)
Jun 17 Python
Django如何实现上传图片功能
Aug 16 Python
python实现银行管理系统
Oct 25 Python
python 解决tqdm模块不能单行显示的问题
Feb 19 Python
为什么说python适合写爬虫
Jun 11 Python
http通过StreamingHttpResponse完成连续的数据传输长链接方式
Feb 12 Python
Python os和os.path模块详情
Apr 02 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在XP下IIS和Apache2服务器上的安装
2006/09/05 PHP
PHP Ajax实现页面无刷新发表评论
2007/01/02 PHP
PHP缓存技术的使用说明
2011/08/06 PHP
destoon二次开发入门示例
2014/06/20 PHP
php将数组存储为文本文件方法汇总
2015/10/28 PHP
PHP 自动加载的简单实现(推荐)
2016/08/12 PHP
Laravel5中Cookie的使用详解
2017/05/03 PHP
JS查看对象功能代码
2008/04/25 Javascript
JavaScript Tips 使用DocumentFragment加快DOM渲染速度
2010/06/28 Javascript
extjs 分页使用jsp传递数据示例
2014/07/29 Javascript
Javascript闭包与函数柯里化浅析
2016/06/22 Javascript
Bootstrap3 Grid system原理及应用详解
2016/09/30 Javascript
Bootstrap CSS布局之列表
2016/12/15 Javascript
JS数组返回去重后数据的方法解析
2017/01/03 Javascript
js获取json中key所对应的value值的简单方法
2020/06/17 Javascript
js简易版购物车功能
2017/06/17 Javascript
jQueryUI Sortable 应用Demo(分享)
2017/09/07 jQuery
vue+springmvc导出excel数据的实现代码
2018/06/27 Javascript
从Vuex中取出数组赋值给新的数组,新数组push时报错的解决方法
2018/09/18 Javascript
ant-design-vue中的select选择器,对输入值的进行筛选操作
2020/10/24 Javascript
[44:15]国士无双DOTA2 6.82版本详解(上)
2014/09/28 DOTA
python调用staf自动化框架的方法
2018/12/26 Python
python儿童学游戏编程知识点总结
2019/06/03 Python
python2使用bs4爬取腾讯社招过程解析
2019/08/14 Python
Python 实现的 Google 批量翻译功能
2019/08/26 Python
利用Python复制文件的9种方法总结
2019/09/02 Python
Pandas将列表(List)转换为数据框(Dataframe)
2020/04/24 Python
Python自动化xpath实现自动抢票抢货
2020/09/19 Python
HTML5 自动聚焦(autofocus)属性使用介绍
2013/08/07 HTML / CSS
全球领先的鞋类零售商:The Walking Company
2016/07/21 全球购物
大学生学习2014年全国两会心得体会
2014/03/12 职场文书
村党的群众路线教育实践活动总结材料
2014/10/31 职场文书
安装工程师岗位职责
2015/02/13 职场文书
PHP实现rar解压读取扩展包小结
2021/06/03 PHP
浅谈 JavaScript 沙箱Sandbox
2021/11/02 Javascript
Nginx如何配置根据路径转发详解
2022/07/23 Servers