2013-07-08 2 views
0

Скажем, у меня есть следующий HTML-скрипт:Преобразование сценария оболочки для питона сценария

<head>$name</head> 

И у меня есть следующий сценарий оболочки, который заменяет переменную в HTML-скрипт с именем

#/bin/bash 
report=$(cat ./a.html) 
export name=$(echo aakash) 
bash -c "echo \"$report\"" 

Это работает.

Теперь я должен реализовать сценарий оболочки в Python, чтобы я мог заменить переменные в файле HTML и вывести замененное содержимое в новый файл. Как мне это сделать?

Пример поможет. Благодарю.

+0

Если вы можете написать его в 'bash', вы можете преобразовать его в' python' и проверить, что ... возможно, должно было сначала отправить вашу попытку python. – icedwater

ответ

0
with open('a.html', 'r') as report: 
    data = report.read() 
data = data.replace('$name', 'aakash') 
with open('out.html', 'w') as newf: 
    newf.write(data) 
+0

Прохладный ... Даже я понял, что это единственный способ ... шаблоны не будут делать, поскольку они требуют замены всех переменных одновременно, в то время как я хочу, чтобы они заменяли по одному – user2359303

+0

@ user2359303: И если вы хотите изменить только первое появление, вы можете изменить 'data.replace ('$ name', 'aakash')' to 'data.replace ('$ name', 'aakash', 1)'. – refi64

2

Похоже, вы после шаблонизатор, но если вы хотите прямо вперед, никаких острых ощущений, встроенные в стандартную библиотеку, вот пример использования string.Template:

from string import Template 

with open('a.html') as fin: 
    template = Template(fin.read()) 

print template.substitute(name='Bob') 
# <head>Bob</head> 

Я настоятельно рекомендую вам прочитать Документах особенно в отношении спасаясь имен идентификаторов и использования safe_substitute и такие ...

+0

Но это потребует замены всех переменных одновременно. Я хочу заменить их по одному. – user2359303

+0

@ user2359303, чтобы быть справедливым - это не было выяснено из вашего вопроса и не имеет смысла - в чем причина, по которой вы хотите или хотите заменить один за раз? –

0

Во-первых, вы можете сохранить шаблон HTML, как:

from string import Template 
with open('a.html') as fin: 
    template = Template(fin.read()) 

Затем, если вы хотите заменить переменные по одному, вам нужно использовать safe_substitute и приносить результат в шаблон каждый раз. Это не приведет к ошибке ключа, даже если значение ключа не указано.

Что-то вроде:

new=Template(template.safe_substitute(name="Bob")) 

После этого новый шаблон является новым, который должен быть изменен снова, если вы хотите.