在一行中插入一个单词并使用Python保存文件

时间:2018-12-20 05:28:08

标签: python

我的目录中的文件包含很多这样的行

cd /oasis/projects/nsf/ets100/
oconv /oasis/projects/nsf/ets100/rla

我想插入单词“ sky /”,因此第二行内容如下:

oconv /oasis/projects/nsf/sky/ets100/rla

最好的方法是什么?

我知道代码的开头将是这样的:

path = r"c:\test"
    for root, subFolders, files in os.walk(path):
        for file in files:
            with open(os.path.join(root, file), 'r') as fRead:
                if line.startswith("oconv"):

2 个答案:

答案 0 :(得分:1)

您可以这样做

def replace_line(file):
   with open(os.path.abspath(file), 'r') as file_obj:
       data = file_obj.readlines()
   for index, lines in enumerate(data):
       if lines.startswith('oconv'):
          data[index] = lines.replace('/nsf/', '/nsf/sky/')
   with open(os.path.abspath(file), 'w') as file_obj:
       file_obj.writelines(data)


path = r"c:\test"
    for root, subFolders, files in os.walk(path):
        for file in files:
            replace_line(file)

答案 1 :(得分:1)

您可以使用正则表达式更新字符串:

import os
import re

path = r"c:\test"
for root, subFolders, files in os.walk('test'):
    for file in files:
        with open(os.path.join(root, file), 'r+') as fh: #open the file with 'r+' to read and write
            content = fh.read()
            new_content = re.sub(r'oconv \/oasis\/projects\/nsf\/(.*)', r'oconv /oasis/projects/nsf/sky/\1', content) #replace strings in file
            fh.seek(0)
            fh.truncate()
            fh.write(new_content)