Замена строки в файле переместит другую строку в верхнюю - PullRequest
2 голосов
/ 02 октября 2019

У меня есть py-файл, подобный следующему:

final_data = ','.join(ordered_data.iloc[0].astype(str).values.tolist())
runtime = boto3.client('runtime.sagemaker')
response = runtime.invoke_endpoint(EndpointName='xgboost-whatever', #Endpoint mark                                           
                                       ContentType='text/csv',
                                       Body=final_data)

Я хочу заменить строку на EndpointName для другой строки. Принимая во внимание вопрос SO Поиск и замена строки в файле на Python Я кодировал это:

def replace(file_path, subst):
    #Create temp file
    fh, abs_path = mkstemp()
    with fdopen(fh,'w') as new_file:
        with open(file_path) as old_file:
            for line in old_file:
                if re.search('response = runtime.invoke_endpoint(.*?)#Endpoint mark',line):
                    new_file.write(line.replace(line, subst))
                else:
                    new_file.write(line)
    #Remove original file
    remove(file_path)
    #Move new file
    move(abs_path, file_path)


file_path = '/home/whatever'
subst = "        response = runtime.invoke_endpoint(EndpointName='xgboost-otro', #Endpoint mark "

replace(file_path, subst)

Однако выполнение предыдущего кода дает мне нечто иное, чем то, что я былищу:

final_data = ','.join(ordered_data.iloc[0].astype(str).values.tolist())
runtime = boto3.client('runtime.sagemaker')
response = runtime.invoke_endpoint(EndpointName='xgboost-otro', #Endpoint mark                                                                              ContentType='text/csv',
                                       Body=final_data)

Поэтому я теряю строку ContentType, которая преобразуется в комментарий. Если я добавлю символ \n в конце subst, он удалит строку ContentType. Как я мог решить это?

Ответы [ 2 ]

1 голос
/ 02 октября 2019

Вам нужно открыть файл в режиме чтения:

with open(file_path, 'r') as old_file:

Кроме того, line.replace(line, subst) такой загадочный способ сказать subst. Вам все равно нужно добавить новую строку в конце subst или использовать

new_file.write("{}\n".format(subst)) 

вместо

new_file.write(line.replace(line, subst))
1 голос
/ 02 октября 2019

Вы забыли \n в конце строки:

subst = "        response = runtime.invoke_endpoint(EndpointName='xgboost-otro', #Endpoint mark\n"

и в логике замены:

   new_file.write(subst)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...