<p>假设在本例中我们可以忽略时间戳嵌入到XML中,那么可以使用<code>re.sub()</code>来调整它们:</p>
<pre><code>#!/usr/bin/env python2
import datetime as DT
import fileinput
import re
timestamp_regex = '(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}).(\d{3})Z'
def add_two_days(m):
numbers = map(int, m.groups())
numbers[-1] *= 1000 # milliseconds -> microseconds
try:
utc_time = DT.datetime(*numbers)
except ValueError:
return m.group(0) # leave an invalid timestamp as is
else:
utc_time += DT.timedelta(days=2) # add 2 days
return utc_time.strftime('%Y-%m-%dT%H:%M:%S.%f')[:-3] + 'Z'
replace_time = re.compile(timestamp_regex).sub
for line in fileinput.input('test.xml', backup='.bak', inplace=1, bufsize=-1):
print replace_time(add_two_days, line),
</code></pre>
<p>为了简化时间戳的使用,它们被转换为<code>datetime</code>对象。您可以在这里使用<code>timedelta()</code>调整时间。在</p>
<p><code>fileinput.input(inplace=1)</code>就地更改输入文件(在本例中,<code>print</code>将打印到该文件)。备份文件被复制到具有相同名称和附加的<code>.bak</code>文件扩展名的文件中。见<a href="https://stackoverflow.com/q/17140886/4279">How to search and replace text in a file using Python?</a></p>