Если вы предпочитаете bash regex, попробуйте следующее:
declare -A name
regex="<remote-name>([^<]+)</remote-name>"
while read -r line; do
if [[ $line =~ $regex ]]; then
name["${BASH_REMATCH[1]}"]=1
fi
done < "test.xml"
for i in "${!name[@]}"; do
echo "$i"
done
Вот рабочий код, разбитый на простые части для ясности:
>>> import datetime
>>> import time
>>> from email import utils
>>> nowdt = datetime.datetime.now()
>>> nowtuple = nowdt.timetuple()
>>> nowtimestamp = time.mktime(nowtuple)
>>> utils.formatdate(nowtimestamp)
'Tue, 10 Aug 2010 20:43:53 -0000'
Объяснение: email.utils.formatdate
хочет временную метку, то есть число с плавающей точкой с секундами (и их долей) с начала эпохи. Экземпляр datetime
не предоставляет вам метку времени напрямую, но он может предоставить вам временную кортеж с помощью метода timetuple
и time.mktime
, конечно, может затем сделать отметку времени из такого кортежа.
Python 3.3, в дополнение к методам, упомянутым другими комментаторами, также добавил метод format_datetime
, который намного чище:
>>> import datetime
>>> import email.utils
>>> dt = datetime.datetime.now()
>>> email.utils.format_datetime(dt)
'Thu, 09 Mar 2017 10:50:00 -0000'
Если вам действительно нужно текущее время, просто вызовите formatdate
без аргументов:
>>> from email.Utils import formatdate
>>> formatdate()
'Tue, 10 Aug 2010 20:40:23 -0000'
Но если вы должны передать ему аргумент, вам нужен вывод time.time
(количество секунд с 01.01.1970):
>>> import time
>>> formatdate(time.time())
'Tue, 10 Aug 2010 20:41:43 -0000'
FWIW, datetime.datetime.now ()
возвращает объект datetime
, а это не то, что formatdate
ожидает.
Отредактировано для добавления: если у вас уже есть объект datetime, вы можете отформатировать его соответствующим образом для formatdate:
>>> import datetime
>>> dt = datetime.datetime.now()
>>> formatdate(float(dt.strftime('%s')))
'Tue, 10 Aug 2010 20:46:16 -0000'
Отредактировано: Алекс Мартелли отметил, что строка формата '% s' для strftime может не переноситься между платформами. Возможной альтернативой может быть, как он сам предположил,
>>> formatdate(time.mktime(dt.timetuple()))
'Tue, 10 Aug 2010 20:46:16 -0000'