Gzip 压缩 CSV 文件会截断它

Gzipping a CSV file truncates it

我有一个脚本可以将数据写入 CSV 文件,然后对其进行 gzip 压缩。

奇怪的是 gzip 文件被截断了几行(文件总大小超过 1800 万行)。

我手动压缩了脚本生成的 CSV 文件,没有文件被截断。但是,当我使用 Python 压缩文件时(我尝试了 gzip、os 和子进程),文件被截断了。我不明白为什么会这样。

下面的代码片段:

#Remove quotes from file
with open(localFile, "r") as csvfile:
    csvreader = csv.reader(csvfile, skipinitialspace=True)

    #Skip the header row
    next(csvreader)
    writer = csv.writer(open(outputFile, "w"), quoting=csv.QUOTE_NONE)
    for row in csvreader:
        writer.writerow(row)

#Zip file
zipCommand = f"gzip {outputFile}"
exit_code =os.system(zipCommand)

文件总大小超过 1800 万行

我假设将所有这些都保存在 RAM 内存中是不可行的。您可以提供 csv.writer gzip 的文件句柄来避免这种情况。考虑以下简单示例:

import csv, gzip
with gzip.open("file.csv.gz", "wt") as gf:
    writer = csv.writer(gf, quoting=csv.QUOTE_NONE)
    writer.writerow([1,2,3])
    writer.writerow([4,5,6])
    writer.writerow([7,8,9])

这将创建 file.csv.gz,在 gunzip file.csv.gz 之后您将获得包含以下内容的文件

1,2,3
4,5,6
7,8,9

注意:使用 wt(写入文本)模式与发出文本的 csv.writer 一起使用。