Python / Pandas从csv创建zip文件

时间:2016-06-10 17:36:22

标签: python csv pandas zip compression

是否有人可以提供如何使用Python / Pandas包从csv文件创建zip文件的示例? 谢谢

4 个答案:

答案 0 :(得分:12)

使用

df.to_csv('my_file.gz', compression='gzip')

来自文档:

  

压缩:字符串,可选   表示要在输出文件中使用的压缩的字符串,允许的值为'gzip','bz2','xz',仅在第一个时使用   参数是文件名

请参阅有关zip文件here的支持的讨论。

答案 1 :(得分:10)

在熊猫的to_csv()方法中,除了压缩类型(gzzip等)外,您还可以指定存档文件名-只需将带有必要参数的字典传递为{ {1}}参数:

compression

在上面的示例中,compression_opts = dict(method='zip', archive_name='out.csv') df.to_csv('out.zip', compression=compression_opts) 方法的第一个参数定义[ZIP]存档文件的名称,字典的to_csv键定义[ZIP]压缩类型,而{{字典的1}}键定义存档文件中[CSV]文件的名称。

结果:

method

查看to_csv() pandas docs

中的详细信息

答案 2 :(得分:0)

为响应Stefan的回答,请为zip csv文件添加“ .csv.gz”

df.to_csv('my_file.csv.gz', compression='gzip')

希望有帮助

答案 3 :(得分:0)

Pandas to_csv 压缩存在一些安全漏洞,它会在 Linux 机器上的 zip 存档中留下文件的绝对路径。更不用说人们可能希望将文件保存在压缩文件的最高级别。以下函数通过使用 zipfile 解决了这个问题。最重要的是,它不受 pickle 协议更改(4 到 5)的影响。

from pathlib import Path
import zipfile

def save_compressed_df(df, dirPath, fileName):
    """Save a Pandas dataframe as a zipped .csv file.

    Parameters
    ----------
    df : pandas.core.frame.DataFrame
        Input dataframe.
    dirPath : str or pathlib.PosixPath
        Parent directory of the zipped file.
    fileName : str
        File name without extension.
    """

    dirPath = Path(dirPath)
    path_zip = dirPath / f'{fileName}.csv.zip'
    txt = df.to_csv(index=False)
    with zipfile.ZipFile(path_zip, 'w', zipfile.ZIP_DEFLATED) as zf:
        zf.writestr(f'{fileName}.csv', txt)