【问题标题】:Concat multiple .gz files, skipping header lines in all but the first file using Python连接多个 .gz 文件,使用 Python 在除第一个文件之外的所有文件中跳过标题行
【发布时间】:2022-01-28 19:40:04
【问题描述】:

我的问题与this 基本相同,但我不想使用awk,而是想使用Python,假设它并不比使用其他方法慢很多。我正在考虑逐行阅读并即时压缩,但后来我遇到了this 帖子,这听起来是个坏主意(压缩效率不是很高)。我遇到了this nice-looking gzip built-in Python library,所以我希望有一些干净、快速、高效的 p​​ythonic 方式来做到这一点。

我想从这里开始:

gzcat file1.gz
# header
1
2

到这里:

# header
1
2
1
2
1
2
1
2

我有几百个文件,未压缩的总大小约为 60 GB。这些文件是压缩后的 CSV 文件。

【问题讨论】:

标签: python-3.x gzip


【解决方案1】:

由于您需要删除每个 CSV 文件的第一行,因此您别无选择,只能将所有数据解压缩并重新压缩。

您可以打开一个 gzip 输出文件以使用with gzip.open('all.gz', 'wb') as g: 写入结果。

您可以使用with gzip.open('filen.gz', 'rb') as f: 打开每个输入文件,然后在该对象上使用x = f.readline() 以一次一行读取未压缩的数据。例如,您可以选择丢弃每个文件中的第一行,而不是第一行。

对于您想要保留的行,您可以使用g.write(x) 将它们写入输出。

【讨论】:

  • 我实际上在另一篇文章中遇到了这种方法。问题是我不希望最终文件中有一堆标题,只有一个标题。每个输入文件的顶部都有一个标题,我希望最终的输出文件也只有一个标题。
  • CSV 标头? ..
  • 是的,一个 CSV 标头
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-13
  • 1970-01-01
  • 2013-05-13
  • 1970-01-01
  • 1970-01-01
  • 2022-12-01
相关资源
最近更新 更多