打开文件并编辑一行

时间:2018-11-23 08:53:28

标签: python

我正在尝试使用python修改js文件中的特定行。

这是js文件:

...
hide: [""]
...

这是我的python代码:

with open('./config.js','r') as f:
   lines = f.readlines()

with open('./config.js','w') as f:
   for line in lines:
       line = line.replace('hide', 'something')
       f.write(line)

因此可以,但这不是我想要的。

我想在方括号之间写“东西”,而不是替换“隐藏”。

所以我不知道该怎么做:我是否必须替换整行,还是可以在方括号之间添加一个单词?

谢谢

5 个答案:

答案 0 :(得分:4)

如果要在此行替换文本,可以执行以下操作:

with open('./config.js','r') as f:
   lines = f.readlines()

with open('./config.js','w') as f:
   new_value = 'Something New'
   for line in lines:
       if line.startswith('hide'):
           line = 'hide: ["{}"]'.format(new_value)
       f.write(line)

或有条件的

           if line.startswith('hide'):
               line = line.replace('""', '"Something new"')

以下是替换hide括号中任何以任何空格开头的值的方法。

lines = '''\
first line
            hide: [""]
       hide: ["something"]
last line\
'''
new_value = 'new value'

for line in lines.splitlines():
    if line.strip().startswith('hide'):
       line = line[:line.index('[')+2] + new_value + line[line.index(']')-1:]
    print(line)

输出:

first line
            hide: ["new value"]
       hide: ["new value"]
last line

答案 1 :(得分:1)

如果hide: [""]不明确,则只需加载整个文件,然后替换并写回即可:

newline = 'Something new'

with open('./config.js','r') as f:
   txt = f.read()

txt = txt.replace('hide: [""]', 'hide: ["' + newline + '"]')

with open('./config.js','w') as f:
   f.write(txt)

答案 2 :(得分:0)

您可以使用re.sub()

import re
with open('./config.js','r') as f:
   lines = f.readlines()

with open('./config.js','w') as f:
   for line in lines:
       line = re.sub(r'(\[")("\])', r'\1' + 'something' + r'\2', line)
       f.write(line)

它可以通过搜索正则表达式来工作,但是可以根据需要在左侧((\[")和右侧(("\]))上形成一个组。然后,您将要插入的文本的任意一侧连接起来(在此示例中为'something')。

边界( )构成了一个可以用r'\1'替换的组,然后第二个组是r'\2'

答案 3 :(得分:0)

只要您没有“隐藏”文件中的其他任何地方,您就可以做到

with open('/config.js','r') as f:
    lines = f.readlines()

with open('./config.js','w') as f:
    for line in lines:
        line = line.replace('hide [""]', 'hide ["something"]')
        f.write(line)

答案 4 :(得分:0)

您可以使用fileinput并就地替换它:

import fileinput
import sys

def replaceAll(file,searchExp,replaceExp):
    for line in fileinput.input(file, inplace=1):
        if searchExp in line:
            line = line.replace(searchExp,replaceExp)
        sys.stdout.write(line)

replaceAll("config.js",'hide: [""]','hide: ["something"]')

Reference