【问题标题】:store data from url line by line in python在python中逐行存储来自url的数据
【发布时间】:2020-03-02 09:41:44
【问题描述】:

我正在尝试从 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]

【问题讨论】:

  • 你得到什么输出?预期的输出不是有效的列表
  • 我只得到一个列表,即 [1,1,1,2,2,2,3,3,3] @Sayse

标签: python python-3.x list dictionary python-requests


【解决方案1】:

由于您没有显示您的数据源或您的输入,因此很难说出您做错了什么。但是,以下是从源读取数据的 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', ''],..........

【讨论】:

  • += 不支持的操作数类型:'int' 和 'str' @Chris Doyle
  • [['1 1 1\r\n2 2 2\r\n3 3 3']] 这就是我现在得到的
猜你喜欢
  • 1970-01-01
  • 2021-07-28
  • 2023-03-04
  • 2021-12-21
  • 1970-01-01
  • 2020-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多