我一直在使用用户定义的功能来打开ZIP文件中包含的CSV文件,这对我来说一直很好。
当它们保存在Python的.zip文件中时,如何从网址中抓取.csv文件?
现在,我正在尝试打开包含在另一个ZIP中的ZIP中的CSV文件,并且遇到了一些麻烦。
我没有收到此错误,而不是从CSV获得数据帧的预期输出:
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xfd in position 0: invalid start byte
哪种方式有意义,因为我正在尝试使用以下方式打开一个zip文件 read_csv()
import pandas as pd
def fetch_multi_csv_zip_from_url(url, filenames=(), *args, **kwargs):
assert kwargs.get('compression') is None
req = urlopen(url)
zip_file = zipfile.ZipFile(BytesIO(req.read()))
if filenames:
names = zip_file.namelist()
for filename in filenames:
if filename not in names:
raise ValueError(
'filename {} not in {}'.format(filename, names))
else:
filenames = zip_file.namelist()
return {name: pd.read_csv(zip_file.open(name), *args, **kwargs)
for name in filenames}
try:
from urllib.request import urlopen
except ImportError:
from urllib2 import urlopen
from io import BytesIO
import zipfile
final_links_list =['http://www.nemweb.com.au/REPORTS/ARCHIVE/Dispatch_SCADA/PUBLIC_DISPATCHSCADA_20170523.zip', 'http://www.nemweb.com.au/REPORTS/ARCHIVE/Dispatch_SCADA/PUBLIC_DISPATCHSCADA_20170524.zip']
l = len(final_links_list)
for j in range(0,l):
print(j)
dfs = fetch_multi_csv_zip_from_url(final_links_list[j])
这是我一直在使用的代码,我认为我必须更改以以下内容开头的行:
return {name: pd.read_csv(zip_file.open(name)
因为它不再返回csv文件,而是zip文件。
相关分类