Dask read_csv 在尝试读取压缩的 csv 文件时抛出错误 'ZipExtFile' 对象没有属性 'startswith'?
Dask read_csv throws error 'ZipExtFile' object has no attribute 'startswith' when trying to read a zipped csv file?
我有一段代码试图使用 Dask 读取压缩的 csv 文件。
import dask.dataframe as dd
with fs.open('/filename.csv.zip') as f:
zf = zipfile.ZipFile(f)
file = zf.open('filename.csv', 'r')
df = dd.read_csv(file)
当 运行 这段代码时,我得到一个 AttributeError: 'ZipExtFile' object has no attribute 'startswith',但是如果我将最后一行转换为只使用 pandas 读取 csv 文件,按预期读取数据帧。我该如何解决这个问题?
Dask 不喜欢直接处理 file-like 对象,因为它需要关心可能序列化所有参数并将它们发送给其他地方的工作人员。然而,fsspec 为您处理复杂的路径,因此您可以更简单地实现您想要的:
df = dd.read_csv("zip://filename.csv::file://filename.csv.zip")
(您可以省略“file://”,因为它是默认后端,但为了明确起见,我将其包括在内)
作为参考,文档字符串说参数必须是字符串:
urlpath : string or list
Absolute or relative filepath(s). Prefix with a protocol like s3://
to read from alternative filesystems. To read from multiple files you
can pass a globstring or a list of paths, with the caveat that they
must all have the same protocol.
我有一段代码试图使用 Dask 读取压缩的 csv 文件。
import dask.dataframe as dd
with fs.open('/filename.csv.zip') as f:
zf = zipfile.ZipFile(f)
file = zf.open('filename.csv', 'r')
df = dd.read_csv(file)
当 运行 这段代码时,我得到一个 AttributeError: 'ZipExtFile' object has no attribute 'startswith',但是如果我将最后一行转换为只使用 pandas 读取 csv 文件,按预期读取数据帧。我该如何解决这个问题?
Dask 不喜欢直接处理 file-like 对象,因为它需要关心可能序列化所有参数并将它们发送给其他地方的工作人员。然而,fsspec 为您处理复杂的路径,因此您可以更简单地实现您想要的:
df = dd.read_csv("zip://filename.csv::file://filename.csv.zip")
(您可以省略“file://”,因为它是默认后端,但为了明确起见,我将其包括在内)
作为参考,文档字符串说参数必须是字符串:
urlpath : string or list Absolute or relative filepath(s). Prefix with a protocol like
s3://
to read from alternative filesystems. To read from multiple files you can pass a globstring or a list of paths, with the caveat that they must all have the same protocol.