python3, UnicodeDecodeError при чтении содержимого разархивированного файла - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть код для загрузки некоторых заархивированных CSV-файлов, их разархивирования и последующего объединения данных в один фрейм данных.Проблема в том, что я получаю ошибку

import pandas as pd
import requests
from io import BytesIO
from zipfile import ZipFile
from bs4 import BeautifulSoup


def findZipLinks(url):
    r = requests.get(url)
    bs = BeautifulSoup(r.content, features="html.parser")
    links = [agecaredata_url + a.get('data-link') for a in bs.findAll('a', {"class": "downloadhrefp_lt_WebPartZone6_znMC_pageplaceholder_p_lt_WebPartZone2_ZoneA_znPublicationFooterItem_znPublicationFooterItem_zone_Stacker_MultiColumns u-dtb u-w100p u-bgc-primary u-c-fff c-publication__download u-mb-gutter0p25x"}) if "zip" in a.get("data-link")]
    return links


exits = findZipLinks('https://www.gen-agedcaredata.gov.au/Resources/Access-data/2018/June/GEN-data-People-leaving-aged-care')
dfs = []
for exit_url in exits:
    r = requests.get(exit_url)
    zipfile = ZipFile(BytesIO(r.content))
    dfs.append(pd.read_csv(zipfile.open(zipfile.namelist()[0]), dtype=str))

pd.concat(df for df in dfs).reset_index(drop=True)

Проблема в том, что я получаю ошибку UnicodeDecodeError: 'utf-8' codec can't decode byte 0x96 in position 2: invalid start byte в строке добавления.Я пытался вызвать .decode ('utf-8') и .decode ('windows-1252'), но я получаю похожие ошибки.Может кто-нибудь помочь мне понять, что не так?

1 Ответ

0 голосов
/ 13 ноября 2018

Когда вы читаете файл, укажите режим чтения как wb

zipfile.open(zipfile.namelist()[0], 'wb')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...