0

这是我要更改的 xml/kml 文件:http: //pastebin.com/HNwzLppa

我要解决的问题:我们有一个由日志文件中的数据生成的 kml 文件。数据有时与 GMT 存在时间偏差。(我们正在解决这个问题。)我们无法控制该过程用于生成 kml 的数据,否则整个练习将毫无意义。我们编写了一个脚本来检查与 GMT 的偏差。

我想要完成的事情: 使用我们已经编写的脚本将小时、分钟和秒的差异输入到这个脚本中。找到所有<timestamp>标签并提取datetime并执行 atimedelta并写回新的时间戳,然后保存文件。

到目前为止我做了什么:

import datetime
import time
import re
import csv
from bs4 import BeautifulSoup

#Open the KML file.
soup = BeautifulSoup(open('doc.kml'), "xml")

#Take keyboard input on hours minutes and seconds offset
hdata = raw_input("How many hours off is the file: ")
mdata = raw_input("How many minutes off is the file: ")
sdata = raw_input("How many seconds off is the file: ")

#Convert string to float for use in timedelta.
h = float(hdata)
m = float(mdata)
s = float(sdata)

#Find the timestamp tags in the file. In this case just the first 68.
times = soup('timestamp', limit=68)

#Loop thru the tags.
for time in times:  
timestring = time.text[8:27]
newdate = (datetime.datetime.strptime(timestring, "%Y-%m-%d %H:%M:%S") + datetime.timedelta(hours= h, minutes = m, seconds = s))
times.replaceWith()

#Print to output the contents of the file.
print(soup.prettify())

我得到的错误:

Traceback (most recent call last):
File ".\timeshift.py", line 27, in <module>
times.replaceWith()
AttributeError: 'ResultSet' object has no attribute 'replaceWith'

我的问题是我该如何做我想做的事情,并且在 prettify 语句之后将文件写入磁盘。

提前致谢。

4

1 回答 1

0

您正在尝试替换times结果集(使用s),而不是单个time标签(否s)。

但是,您可能不想替换标签;你想替换标签中的文本

for time in times:  
    timestring = time.text[8:27]
    newdate = (datetime.datetime.strptime(timestring, "%Y-%m-%d %H:%M:%S") +
               datetime.timedelta(hours= h, minutes = m, seconds = s))
    newstring = soup.new_string(time.text[:8] + 
        newdate.strftime("%Y-%m-%d %H:%M:%S") + time.text[27:])
    time.string.replaceWith(newstring)

这将创建一个带有 的新NavigableString对象soup.new_string(),并替换 上的原始字符串子节点time

于 2014-05-02T17:56:52.273 回答