首页 > 解决方案 > 在python中逐行存储来自url的数据

问题描述

我正在尝试从 url 逐行读取数据并将每一行存储在列表中:我尝试过:

url = request.GET.get('url')

data = [] 
with closing(requests.get(url, stream=True)) as f:
    data = [list(map(int, line.split('\n'))) for line in f]

输入:

1 1 1 
2 2 2
3 3 3

预期输出:

data = [[1,1,1],[2,2,2],[3,3,3]

标签: pythonpython-3.xlistdictionarypython-requests

解决方案


由于您没有显示您的数据源或您的输入,因此很难说出您做错了什么。但是,以下是从源读取数据的 csv 文件的示例,它将逐行读取,然后用逗号分隔每一行并将其存储为列表。这一切都是在列表理解中完成的,因此您最终会得到一个列表列表。

注意:这只是 CSV 的一个示例,通常我会使用 csv 模块进行解析。但这应该让您了解如何在每行数据返回并对其进行拆分时对其进行读取。

在您的代码中,您将一次读取每一行,然后您说要按新行拆分。但是不会有新的线路可以分割,因为您一次只能得到一条线路。

import requests
from contextlib import closing

with closing(requests.get('http://samplecsvs.s3.amazonaws.com/SacramentocrimeJanuary2006.csv', stream=True)) as f:
    data = [line.decode().split(',') for line in f]
print(data)

输出

[['cdatetime', 'address', 'district', 'beat', 'grid', 'crimedescr', 'ucr_ncic_code', 'latitude', 'longitude\r1/1/06 0:00', '3108 OCCIDENTAL DR', '3', '3C        ', '111'], ['5', '10851(A)VC TAKE VEH W/O OWNER', '2404', '38.55042047', '-121.3914158\r1/1/06 0:00', '2082 EXPEDITION WAY', '5', '5A        ', '1512', '459 PC  BURGLARY'], [' RESIDENCE', '2204', '38.47350069', '-121.4901858\r1/1/06 0:00', '4 PALEN CT', '2', '2A        ', '212', '10851(A)VC TAKE VEH W/O OWNER', '2404', '38.65784584', ''],..........

推荐阅读