访问Pandas中的Zip压缩选项至_csv

2022-04-05 00:00:00 python pandas dataframe zip export-to-csv

问题描述

我在查找可用的压缩选项时遇到问题。 在本页底部: to_csv 他们有一个显示两个选项的示例:

COMPRESSION_OPTS=DICT(方法=‘ZIP’, 存档名称=‘out.csv’)

但我没有看到所有可用选项的列表。在其他地方也找不到。 我很想看看完整的清单(假设不止这两个)

目前的最终目标:压缩操作将文件压缩到一个压缩文件中,但所有文件夹也都在该压缩文件中,因此该文件实际上被隐藏在该压缩文件中的一堆文件夹中。我相信有一个简单的选项可以防止文件夹被添加到压缩包中...


解决方案

我想我理解您的问题。假设我有一个数据帧,并且我想将其保存在本地的Zipfile中。假设我想要将该压缩文件保存在somepath/myfile.zip

位置

假设我运行此程序(还假设somepath/是当前工作目录中的有效文件夹):

### with_path.py

import pandas as pd

filename = "myfile"
df = pd.DataFrame([["a", 1], ["b", 2]])

compression_options = {"method": "zip"}
df.to_csv(f"somepath/{filename}.zip", compression=compression_options)

如果我列出结果文件的内容,我可以看到我想要存储Zip文件的路径也被用作Zip中的文件名,包括文件夹结构,甚至仍然命名为.Zip,这很奇怪:

(.venv) pandas_test % unzip -l somepath/myfile.zip
     
Archive:  somepath/myfile.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
       17  09-17-2021 12:56   somepath/myfile.zip
---------                     -------
       17                     1 file

相反,我可以提供一个archive_name作为压缩选项,以显式地在压缩文件中为我的文件提供一个名称。如下所示:

### without_path.py

import pandas as pd

filename = "myfile"
df = pd.DataFrame([["a", 1], ["b", 2]])

compression_options = {"method": "zip", "archive_name": f"{filename}.csv"}
df.to_csv(f"somepath/{filename}.zip", compression=compression_options)

现在,尽管我们生成的压缩文件仍被写入somepath/中的文件的所需位置,但压缩文件不会将路径作为文件名的一部分,并且使用.csv扩展名正确命名。

(.venv) pandas_test % unzip -l somepath/myfile.zip

Archive:  somepath/myfile.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
       17  09-17-2021 12:59   myfile.csv
---------                     -------
       17                     1 file

文档中似乎没有提到这种奇怪的默认行为,但您可以在pandas.DataFrame.to_csv文档的最后一个示例中看到archive_name参数的使用。我不知道他们应该抛出一个错误并强制您提供archive_name值,因为我无法想象您何时会想要将压缩文件中的文件命名为与压缩文件本身完全相同的名称。

相关文章