我终于用下面的代码解决了这个问题(它可能不是 100% 最优的,但它可以工作..):
import re
import xml.etree.ElementTree as et
import datetime
name_file = 'test.gpx' #raw_input("Naam van file incl .txt op het einde: ")
nieuwe_datum = '2016-06-30' #raw_input("Nieuwe datum format YYYY-MM-DD: ")
new_start_time = '14:45:00' #raw_input("Start tijdstip format hh:mm:ss : ")
new_start_time = datetime.datetime.strptime(new_start_time, "%H:%M:%S")
fh = open(name_file, "r")
filedata = fh.read()
fh.close()
outfile = open('output.gpx', 'w')
time_list = list()
filedata = filedata.split()
for line in filedata:
cur_date = re.findall('\d{4}[-/]\d{2}[-/]\d{2}', line)
for match1 in cur_date:
line = line.replace(match1, nieuwe_datum)
cur_time = re.findall('\d{2}:\d{2}:\d{2}.\d{3}', line)
for match in cur_time:
time_list.append(match)
cur_start_time = min(time_list)
print 'current start time: '
print cur_start_time
print 'new start time: '
print new_start_time
cur_start_time = datetime.datetime.strptime(cur_start_time, "%H:%M:%S.%f")
if cur_start_time > new_start_time:
time_dif = (cur_start_time - new_start_time)
print 'time difference is: '
print time_dif
for line in filedata:
cur_time = re.findall('\d{2}:\d{2}:\d{2}.\d{3}', line)
for match2 in cur_time:
new_time = datetime.datetime.strptime(match2, "%H:%M:%S.%f")
new_time = new_time - time_dif
new_time = re.findall('\d{2}:\d{2}:\d{2}', str(new_time))
line = line.replace(match2, new_time[0])
line = line + "\n"
outfile.write(line)
#print line
else:
time_dif = new_start_time - cur_start_time
print 'time difference is: '
print time_dif
for line in filedata:
cur_time = re.findall('\d{2}:\d{2}:\d{2}.\d{3}', line)
for match2 in cur_time:
new_time = datetime.datetime.strptime(match2, "%H:%M:%S.%f")
new_time = new_time + time_dif
new_time = re.findall('\d{2}:\d{2}:\d{2}', str(new_time))
line = line.replace(match2, new_time[0])
line = line + "\n"
outfile.write(line)
#print line
print 'Nieuwe start datum is: '
print nieuwe_datum
outfile.close()