【问题标题】:Python 3 - write parsed XML data to .csv or .txt filePython 3 - 将解析的 XML 数据写入 .csv 或 .txt 文件
【发布时间】: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

感谢您的帮助!

【问题讨论】:

  • 您似乎是在循环内重新打开文件,overwriting 每次都将其内容

标签: python xml csv


【解决方案1】:

因为您在 for 循环中打开文件,所以写入一次,然后在 for 循环中一次又一次地打开文件,从而擦除文件的所有内容,最终只写入最后一行

移动

zonarFile = open('idleData.txt','w+')

在for循环之外或将其更改为

zonarFile = open('idleData.txt','a')`

它以append 模式打开文件并向其中添加内容,而不是每次打开时都覆盖文件的内容

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-08
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多