簡體   English   中英

使用ElementTree解析XML會生成空的csv文件

[英]Using ElementTree to parse XML results in empty csv file

我是Python的完全入門者,所以我不得不依靠一些教程來將這些代碼放在一起。 它確實生成一個.csv文件,但結果為空(0kb)。 我發現其他有此問題的人都忘記了關閉文件,但這似乎不是這里的問題。 我很感謝任何提示。

這是xml,如果有幫助的話: https : //api.nextbike.net/maps/nextbike-live.xml?city=14

import xml.etree.ElementTree as ET
import csv

tree = ET.parse('nextbike-live.xml')
root = tree.getroot()

with open('Bike_pos.csv', 'w') as Bike_pos:
    csvwriter = csv.writer(Bike_pos)
    bike_head = []

    count = 0
    for member in root.findall('place'):
        bike = []
        if count == 0:
            station = member.find('name').tag
            bike_head.append(station)
            lat = member.find('lat').tag
            bike_head.append(lat)
            lon = member.find('lng').tag
            bike_head.append(lon)
            bikeno = member.find('bike_numbers').tag
            bike_head.append(bikeno)
            count = count + 1

        station = member.find('name').text
        bike.append(station)
        lat = member.find('lat').text
        bike.append(lat)
        lon = member.find('lng').text
        bike.append(lon)
        bikeno = member.find('bike_numbers').text
        csvwriter.writerow(bike)
Bike_pos.close()

我得到了一個好朋友的幫助。 我的xml源文件有幾個孩子,我的代碼沒有搜索到。

他給了我這段代碼,它像一個魅力一樣工作,比我擁有的代碼簡單得多:

import xml.etree.ElementTree as ET
import csv

tree = ET.parse('nextbike-live-test.xml')
root = tree.getroot()

with open('Bike_pos.csv', 'w') as Bike_pos:
    csvwriter = csv.writer(Bike_pos)

    #CSV Header
    csvwriter.writerow(['Station', 'lat', 'lng', 'Bikes'])

    #Add info about each station
    for country in root.findall('country'):
        for city in country.findall('city'):
            for place in city.findall('place'):
                bike = []

                bike.append(place.get('name'))
                bike.append(place.get('lat'))
                bike.append(place.get('lng'))
                bike.append(place.get('bike_numbers'))
                csvwriter.writerow(bike)

為了簡化起見,您也可以這樣嘗試:

import requests
import csv
from lxml.html import fromstring

with open("Bike_Details.csv","w",newline="") as infile:
    writer = csv.writer(infile)
    writer.writerow(["station","lat","lng","bike_num"])

    res = requests.get("https://api.nextbike.net/maps/nextbike-live.xml?city=14")
    root = fromstring(res.content)
    for items in root.cssselect("country city place"):
        station = items.get("name")
        lat = items.get("lat")
        lng = items.get("lng")
        bike_num = items.get("bike_numbers")
        print(station,lat,lng,bike_num)
        writer.writerow([station,lat,lng,bike_num])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM