Сохранить стандартный вывод файла в файл

1

извините, но я очень новичок в python, мне нужен скрипт для поиска по шаблону и замены всей строки в файл, у меня есть весь скрипт, но проблема в том, что with fileinput...

#!/usr/bin/env python3

import json
import requests
import sys
import fileinput

url = 'http://169.254.169.254/latest/meta-data/iam/security-credentials/test'

r = requests.get(url)
accesskey = json.loads(r.content.decode('utf-8'))['AccessKeyId']
secretkey = json.loads(r.content.decode('utf-8'))['SecretAccessKey']

with fileinput.input(files=('./envFile.sh')) as envfile:

  for line in envfile:
    if line.strip().startswith('export AWS_ACCESS_KEY='):
      line = 'AWS_ACCESS_KEY="%s"\n' % (accesskey)
    if line.strip().startswith('export AWS_SECRET_KEY='):
      line = 'AWS_SECRET_KEY="%s"\n' % (secretkey)
    sys.stdout.write(line)

Выход:

AWS_ACCESS_KEY="xxxxxxx"
AWS_SECRET_KEY="xxxxxxxxxxxxxxxxxxxxxxxxxx"

Теперь вывод правильный, но мне нужно перезаписать файл, как я могу это сделать?

  • 0
    Чтобы перезаписать файл, вам нужно открыть файл в режиме записи, используя open (myfile, 'w').
  • 0
    Вы можете посмотреть этот ответ stackoverflow.com/questions/11469228/…
Теги:
python-3.x

2 ответа

1
Лучший ответ

Использовать inplace=True

Пример:

import fileinput

with fileinput.input(files='./envFile.sh', inplace=True) as envfile:
    for line in envfile:
        if line.strip().startswith('export AWS_ACCESS_KEY='):
            print(line.replace(line.strip(), 'AWS_ACCESS_KEY="%s"' % (accesskey))) 
        elif line.strip().startswith('export AWS_SECRET_KEY='):
            print(line.replace(line.strip(), 'AWS_SECRET_KEY="%s"' % (secretkey)))
        else:
            print(line)
  • 0
    Спасибо, я только что добавил inplace=True и работает!
  • 0
    Добро пожаловать :)
0

Вы можете сохранить весь свой результат в один список и перебрать его в этот список и записать в файл, используя "с инструкцией", как показано ниже

temp='AWS_ACCESS_KEY="{}"\n'.format(accesskey)
a.append(temp)
temp='AWS_SECRET_KEY="{}"\n'.format(secretkey)
a.append(temp)
with open(file_name,'w') as stream:
    for i in a:
        stream.write(i)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню