【发布时间】:2016-08-16 12:18:00
【问题描述】:
我正在尝试登录网站,解析 XML 数据并将数据写入 .csv 或 .txt(都可以)文件,而不是在屏幕上打印。除了将所有数据写入 .txt 文件之外,下面的代码执行所有操作 - 它只会写入输出的最后一行。
我当前的代码是:
import urllib.request
import time
from lxml import etree
import datetime
import csv
import sys
today = datetime.date.today()
ts = int(time.time()) - 86400
tsend = int(time.time())
dailyReport = "URL_Goes_here".format(ts, tsend)
with urllib.request.urlopen(dailyReport) as url:
soup = url.read()
saveFile = open('{}_dailyReport.xml'.format(today),'wb')
saveFile.write(soup)
saveFile.close()
tree = etree.parse('{}_dailyReport.txt'.format(today))
root = tree.getroot()
print(root.tag, root.attrib)
for assetidle in root.findall('assetidle'):
for element in assetidle:
for event in assetidle.findall('event'):
zonarFile = open('idleData.txt','w+')
fleet = assetidle.get('fleet')
eventtype = event.get('type')
length = event.find('length').text
zonarFile.write('Asset #: %s %s %s' %(fleet,eventtype,length))
zonarFile.write("\n")
print('Asset #: %s %s %s' %(fleet,eventtype,length))
屏幕上的输出是:
eventlist {'start': '1461253877', 'end': '1461340277', 'count': '31', 'ver': '1'}
Asset #: 070 idle 00:21:46
Asset #: 130 idle 00:27:09
Asset #: 004 idle 00:35:42
Asset #: 133 idle 00:26:04
Asset #: 060 idle 00:31:36
Asset #: 049 idle 00:45:06
Asset #: 120 idle 00:33:58
Asset #: 135 idle 00:20:04
Asset #: 044 idle 00:20:45
Asset #: 042 idle 00:44:17
Asset #: 114 idle 00:37:49
Asset #: 121 idle 00:21:55
Asset #: 033 idle 00:28:11
Asset #: 138 idle 00:21:14
Asset #: 059 idle 00:25:39
Asset #: 059 idle 00:43:03
Asset #: 058 idle 00:21:26
Asset #: 041 idle 00:26:28
Asset #: 045 idle 00:21:32
Asset #: 005 idle 00:26:48
Asset #: CAR - 29 idle 00:28:09
Asset #: C-48 idle 00:20:13
Asset #: C-47 idle 02:45:04
Asset #: C-47 idle 00:37:16
Asset #: C-47 idle 02:03:45
Asset #: C-47 idle 00:22:28
Asset #: C-47 idle 10:28:07
Asset #: C-47 idle 00:43:31
Asset #: C16 idle 00:29:31
Asset #: 57 idle 00:20:44
Asset #: 74 idle 00:21:34
这是 txt 文件中唯一的数据:
Asset #: 74 idle 00:21:34
感谢您的帮助!
【问题讨论】:
-
您似乎是在循环内重新打开文件,over
writing 每次都将其内容。