Python:如何从Web读取文件并从数据中创建列表?

时间:2017-03-16 21:05:20

标签: python list api url

所以我完全被困在这里......我有一个我应该使用的网址,我试图读取数据并列出5级或更大的地震列表。现在我可以使用我的功能打印出数据,但它全部印在几条长线上,而不是每个地震都在他们自己的线上。所以我不知道如何附加幅度值...这是函数和网址:

import urllib.request

def readeqi():

    maglist = [] 

    with urllib.request.urlopen('http://earthquake.usgs.gov/fdsnws/event/1/\
        query?format=csv\
        &starttime=1916-02-01\
        &latitude=44.0519\
        &longitude=-123.0867\
        &maxradiuskm=250\
        &minmagnitude=5') as eq:

        line1 = eq.readline()
        line2 = eq.readline()
        line2 = line2.decode()
        line2 = line2.strip().split(',')
        mag = float(line2[4])
    print(mag)

同样,我正在尝试获取幅度值并创建列表,但我不确定如何仅访问幅度值。有人能指出我正确的方向吗?

编辑:添加了line1,line2,line2.decode和mag   所以我想出了如何获得第一个量级。但是我怎样才能让他们全部超过5?

EDIT2:

好吧所以我想我真正想要帮助的是......我怎样才能将数据剥离到他们自己的每一行?就像我怎么能写一个for或while循环来做line2.strip()呢?

2 个答案:

答案 0 :(得分:3)

import requests
import csv

url = 'http://earthquake.usgs.gov/fdsnws/event/1/query'

query = {
    'format': 'csv',
    'starttime': '1916-02-01',
    'latitude': '44.0519',
    'longitude': '-123.0867',
    'maxradiuskm': '250',
    'minmagnitude': '5'
}


response = requests.get(url, params=query)
lines = (line.decode('utf-8') for line in response.iter_lines())
csvreader = csv.DictReader(lines)

现在根据需要迭代数据:

>>> g = iter(csvreader)
>>> next(g)['mag']
'6'
>>> next(g)['mag']
'5.9'
>>> next(g)['mag']
'5.9'
>>> next(g)['mag']
'6'
>>> next(g)['mag']
'5.6'

答案 1 :(得分:-1)

替代答案,仅限于踢:尝试使用Beautiful Soup来抓取数据。它有一些很好的格式化工具。