使用ElementTree解析XML导致CSV文件为空
我刚开始学习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()
相关问题:
- 暂无相关问题
2 个回答
0
为了让事情更简单,你也可以这样试试:
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])
0
我得到了一个好朋友的帮助。我的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)