使用 python 中的 URLLIB 从在线 CSV 文件中提取数据

Using URLLIB in python to pull data from online CSV file

因此,在 Python 中,我尝试使用 csv 模块(处理 curse 的 csv 文件中的数据)从 csv 文件中提取数据,我有这个:

import csv
with open('GDMTH_CSV.csv')as csv_file:
  csv_file_read = csv.reader(csv_file)
  for line in csv_file_read:
    print(line)

然后我得到原始数据,所以我相应地修改以获得我需要的特定数据。

但是GDMTH_CSV.csv实际上是一个在线文件,所以我使用urllib.request模块来尝试同样的事情:

import urllib.request
import csv

url='http://www.cre.gob.mx/da/TarifasFinalesdeSuministroBasico.csv'
x = urllib.request.urlopen(url)
csv_read = csv.reader(x)
for line in csv_read:
  print(line)

(顺便说一句,文件名实际上是 "TarifasfinalesdeSuministroBasico.csv"),但这给了我错误 "Iterator should return Strings not bytes, did you open the file in text mode?",所以我的理由是:"ohh that's in bytes; I should just decode that",所以我更改

x = urllib.request.urlopen(url)

x = urllib.request.urlopen(str(url))

但结果是我将文件中的每个字符都放在方括号中。我想我还是无法理解 Python 中的数据类型和列表。 我如何得到类似于第一个代码的结果?

urllib.request.urlopen 返回的对象不适合传递给 csv.reader(),因为该函数需要一个迭代器。此外,我建议使用更简单的 requests 库来进行更高级别的 HTTP 交互。以下应该成功获取数据:

(请注意,我将字节序列解码为 iso-8859-1,因为这是此特定 csv 文件的编码)

import csv
import requests

url = 'http://www.cre.gob.mx/da/TarifasFinalesdeSuministroBasico.csv'

res = requests.get(url)
content = res.content.decode('iso-8859-1')

for line in csv.reader(content.splitlines()):
    print(line)

输出:

['', 'División', '', '', '', '', 'Baja California', '', '', '', '', '', '', '', '', 'Baja California Sur', '', '', '', '', '', '', '', '', 'Bajio', '', '', '', '', '', '', '', '', 'Centro Occidente', '', '', '', '', '', '', '', '', 'Centro Oriente', '', '', '', '', '', '', '', '', 'Centro Sur', '', '', '', '', '', '', '', '', 'Golfo Centro', '', '', '', '', '', '', '', '', 'Golfo Norte', '', '', '', '', '', '', '', '', 'Jalisco', '', '', '', '', '', '', '', '', 'Valle de México Centro', '', '', '', '', '', '', '', '', 'Valle de Mexico Norte', '', '', '', '', '', '', '', '', 'Valle de México Sur', '', '', '', '', '', '', '', '', 'Noroeste', '', '', '', '', '', '', '', '', 'Norte', '', '', '', '', '', '', '', '', 'Oriente', '', '', '', '', '', '', '', '', 'Peninsular', '', '', '', '', '', '', '', '', 'Sureste', '', '', '', '', '', '', '', '']
['Mes', 'Tarifa', 'Descripción', 'Int. Horario', 'Cargo', 'Unidades', 'Transmisión', 'Distribución', 'CENACE', 'Suministro', 'SCnMEM', 'Generación', 'Capacidad', 'Pérdidas', 'TOTAL', 'Transmisión', 'Distribución', 'CENACE', 'Suministro', 'SCnMEM', 'Generación', 'Capacidad', 'Pérdidas', 'TOTAL', 'Transmisión', 'Distribución', 'CENACE', 'Suministro', 'SCnMEM', 'Generación', 'Capacidad', 'Pérdidas', 'TOTAL', 'Transmisión', 'Distribución', 'CENACE', 'Suministro', 'SCnMEM', 'Generación', 'Capacidad', 'Pérdidas', 'TOTAL', 'Transmisión', 'Distribución', 'CENACE', 'Suministro', 'SCnMEM', 'Generación', 'Capacidad', 'Pérdidas', 'TOTAL', 'Transmisión', 'Distribución', 'CENACE', 'Suministro', 'SCnMEM', 'Generación', 'Capacidad', 'Pérdidas', 'TOTAL', 'Transmisión', 'Distribución', 'CENACE', 'Suministro', 'SCnMEM', 'Generación', 'Capacidad', 'Pérdidas', 'TOTAL', 'Transmisión', 'Distribución', 'CENACE', 'Suministro', 'SCnMEM', 'Generación', 'Capacidad', 'Pérdidas', 'TOTAL', 'Transmisión', 'Distribución', 'CENACE', 'Suministro', 'SCnMEM', 'Generación', 'Capacidad', 'Pérdidas', 'TOTAL', 'Transmisión', 'Distribución', 'CENACE', 'Suministro', 'SCnMEM', 'Generación', 'Capacidad', 'Pérdidas', 'TOTAL', 'Transmisión', 'Distribución', 'CENACE', 'Suministro', 'SCnMEM', 'Generación', 'Capacidad', 'Pérdidas', 'TOTAL', 'Transmisión', 'Distribución', 'CENACE', 'Suministro', 'SCnMEM', 'Generación', 'Capacidad', 'Pérdidas', 'TOTAL', 'Transmisión', 'Distribución', 'CENACE', 'Suministro', 'SCnMEM', 'Generación', 'Capacidad', 'Pérdidas', 'TOTAL', 'Transmisión', 'Distribución', 'CENACE', 'Suministro', 'SCnMEM', 'Generación', 'Capacidad', 'Pérdidas', 'TOTAL', 'Transmisión', 'Distribución', 'CENACE', 'Suministro', 'SCnMEM', 'Generación', 'Capacidad', 'Pérdidas', 'TOTAL', 'Transmisión', 'Distribución', 'CENACE', 'Suministro', 'SCnMEM', 'Generación', 'Capacidad', 'Pérdidas', 'TOTAL', 'Transmisión', 'Distribución', 'CENACE', 'Suministro', 'SCnMEM', 'Generación', 'Capacidad', 'Pérdidas', 'TOTAL']
...