加入收藏 | 设为首页 | 会员中心 | 我要投稿 银川站长网 (https://www.0951zz.com/)- 云通信、基础存储、云上网络、机器学习、视觉智能!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

用python怎样在文本指定位置插入内容

发布时间:2023-06-13 10:57:21 所属栏目:语言 来源:
导读:关于“用python如何在文本指定位置插入内容”的知识有一些人不是很理解,对此小编给大家总结了相关内容,具有一定的参考借鉴价值,而且易于学习与理解,希望能对大家有所帮助,有这个方面学习需要的朋友就

关于“用python如何在文本指定位置插入内容”的知识有一些人不是很理解,对此小编给大家总结了相关内容,具有一定的参考借鉴价值,而且易于学习与理解,希望能对大家有所帮助,有这个方面学习需要的朋友就继续往下看吧。

如何在文件中部插入信息

fp = open('D://代码开发//Python.path//jhp//fadd.txt', 'r') #指定文件

s = fp.read() #将指定文件读入内存

fp.close() #关闭该文件

a = s.split('\n')

a.insert(-1, 'a new line') #在第 LINE+1 行插入

s = '\n'.join(a) #用'\n'连接各个元素

fp = open('D://代码开发//Python.path//jhp//fadd.txt', 'w')

fp.write(s)

fp.close()

结果:

"properties":{

    "zookeeper.connect":"zookeeper.com:2015",

    "druid.discovery.curator.path":"/druid/discovery",

    "druid.selectors.indexing.serviceName":"druid/overlord",

    "commit.periodMillis":"12500",

    "consumer.numThreads":"1",

    "kafka.zookeeper.connect":"kafkaka.com:2181,kafka.com:2181,kafka.com:2181",

    "kafka.group.id":"test_dataSource_hod_dd"

a new line

  }

实现在文本指定位置插入内容

1. 场景

生产环境需要对大量的json文件进行写操作,在指定节点中插入一个属性。如下:

{

"dataSources":{

"test_dataSource_hod":{

"spec":{

"dataSchema":{

"dataSource":"test_dataSource_hod",

"parser":{

"type":"string",

"parseSpec":{

"timestampSpec":{

"column":"timestamp",

"format":"yyyy-MM-dd HH:mm:ss"

},

"dimensionsSpec":{

"dimensions":[

"method",

"key"

]

},

"format":"json"

}

},

"granularitySpec":{

"type":"uniform",

"segmentGranularity":"hour",

"queryGranularity":"none"

},

"metricsSpec":[

{

"name":"count",

"type":"count"

},

{

"name":"call_count",

"type":"longSum",

"fieldName":"call_count"

},

{

"name":"succ_count",

"type":"longSum",

"fieldName":"succ_count"

},

{

"name":"fail_count",

"type":"longSum",

"fieldName":"fail_count"

}

]

},

"ioConfig":{

"type":"realtime"

},

"tuningConfig":{

"type":"realtime",

"maxRowsInMemory":"100000",

"intermediatePersistPeriod":"PT10M",

"windowPeriod":"PT10M"

}

},

"properties":{

"task.partitions":"1",

"task.replicants":"1",

"topicPattern":"test_topic"

}

}

},

"properties":{

"zookeeper.connect":"zookeeper.com:2015",

"druid.discovery.curator.path":"/druid/discovery",

"druid.selectors.indexing.serviceName":"druid/overlord",

"commit.periodMillis":"12500",

"consumer.numThreads":"1",

"kafka.zookeeper.connect":"kafkaka.com:2181,kafka.com:2181,kafka.com:2181",

"kafka.group.id":"test_dataSource_hod_dd"

}

}

需要在最后的properties节点中添加一个"druidBeam.randomizeTaskId":"true"属性。

2. 思路

大概的思路如下:

扫描文件夹下所有需要更改的文件

在文件中确认需要更改的位置

插入新的字符

我觉得稍微有点难的地方是在确认插入位置的地方。我们知道的是"druid.selectors.indexing.serviceName":"druid/overlord",这个东西肯定在这个节点中,那我只要能找到这个东西,然后在他的后面 插入就OK了。

好了,思路已经有了,写代码吧。

#!/usr/bin/python

# coding:utf-8

import os

old_string = '"druid/overlord"'

new_string = ('"druid/overlord",' +

'\n ' +

'"druidBeam.randomizeTaskId":"true",')

def insertrandomproperty(file_name):

if '.json' in file_name:

with open(file, 'r') as oldfile:

content = oldfile.read()

checkandinsert(content, file)

else:

pass

def checkandinsert(content, file):

if 'druidBeam.randomizeTaskId' not in content:

# to avoid ^M appear in the new file because of different os

# we replace \r with ''

new_content = content.replace(old_string, new_string).replace('\r', '')

 

with open(file, 'w') as newfile:

newfile.write(new_content)

else:

pass

if __name__ == '__main__':

files = os.listdir('/home/tranquility/conf/service_bak')

os.chdir('/home/tranquility/conf/service_bak')

for file in files:

insertrandomproperty(file)

就是在内存中更新内容,然后重新写回到文件中。代码只是粗略的表达了思路,可以根据需求继续修改优化。

(编辑:银川站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!