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

在行中插入一个单词,并使用Python保存文件,python,Python,我在一个目录中有很多这样的行 cd /oasis/projects/nsf/ets100/ oconv /oasis/projects/nsf/ets100/rla oconv /oasis/projects/nsf/sky/ets100/rla 我想插入单词“sky/”,第二行是这样的 cd /oasis/projects/nsf/ets100/ oconv /oasis/projects/nsf/ets100/rla oconv /oasis/projects/nsf/sky/ets1

我在一个目录中有很多这样的行

cd /oasis/projects/nsf/ets100/
oconv /oasis/projects/nsf/ets100/rla
oconv /oasis/projects/nsf/sky/ets100/rla
我想插入单词“sky/”,第二行是这样的

cd /oasis/projects/nsf/ets100/
oconv /oasis/projects/nsf/ets100/rla
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"):

你可以这样做

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)

你可以这样做

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)

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

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)

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

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)

您如何知道在字符串中插入“sky”的位置?它是否总是位于路径中最后一个文件夹的第二个之前?路径是否始终以“/oasis/projects/nsf/”开头?使用os.path.split,检查文档:@richflow是的,路径始终以“/oasis/projects/nsf/”开头。您如何知道在字符串中插入“sky”的位置?它是否总是位于路径中最后一个文件夹的第二个之前?路径是否始终以“/oasis/projects/nsf/”开头?使用os.path.split,检查文档:@richflow是的,路径始终以“/oasis/projects/nsf/”开头