【问题标题】:Zip csv file in Python without merging columns?在Python中压缩csv文件而不合并列?
【发布时间】:2018-08-29 00:17:27
【问题描述】:

我需要在python中输出一个csv文件,由于文件太大,我使用'zipfile'包来压缩它。但是,当csv文件输出解压后,列合并了……

代码如下:

    for i in dealers:
        data_1=data_dealer[data_dealer['DEALER_ID']==i]
        data=data_1.to_string(index=False, header=True).encode("utf_8_sig")
        azip=zipfile.Zipfile('data%s.zip'%i,mode='w')
        azip.writestr('data%s.csv'%i,data=data,compress_type=zipfile.ZIP_DEFLATED)
        azip.close()

csv 原来是这样的(用逗号分隔):

a,1600,2018,NaN,......

现在只有一列,或者用空格隔开:

a 1600 2018 NaN ......

有人知道如何在不合并列的情况下在 Python 中压缩 csv 吗?

非常感谢!!

【问题讨论】:

  • “列被合并”是什么意思?你能举个例子吗?我很难相信压缩和解压缩会修改文件的内容。请参阅How to Ask 以及如何提供minimal reproducible example
  • @DeepSpace 谢谢你,我提供了一个简单的例子(真的发生了......)
  • @Deanna 我们需要查看一些代码
  • @DeepSpace 代码已更新,非常感谢!

标签: python pandas csv zipfile


【解决方案1】:

通过使用 Pandas to_string() 函数,您正在创建适合在控制台上显示的文本固定列宽表格输出。您希望在列之间创建一个带有, 分隔符的CSV 输出。因此,您需要使用 to_csv() 函数。如果没有为函数提供文件名,则它将整个表作为字符串返回。然后可以使用writestr() 传递:

for i in dealers:
    data_1 = data_dealer[data_dealer['DEALER_ID']==i]
    data = data_1.to_csv(index=False, header=True).encode("utf_8_sig")
    azip = zipfile.Zipfile('data{}.zip'.format(i), mode='w')
    azip.writestr('data{}.csv'.format(i), data=data, compress_type=zipfile.ZIP_DEFLATED)
    azip.close()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-01-12
    • 1970-01-01
    • 1970-01-01
    • 2020-01-24
    • 1970-01-01
    • 2019-07-16
    • 1970-01-01
    • 2021-07-04
    相关资源
    最近更新 更多