合并以 XXXXX.csv.gz_1_2.tar 和 XXXXX.csv.gz_2_2.tar 格式分块的两个文件(使用 python 或 pyspark)

Posted

技术标签:

【中文标题】合并以 XXXXX.csv.gz_1_2.tar 和 XXXXX.csv.gz_2_2.tar 格式分块的两个文件(使用 python 或 pyspark)【英文标题】:Combine two files chunked in this format XXXXX.csv.gz_1_2.tar & XXXXX.csv.gz_2_2.tar (with python or pyspark) 【发布时间】:2020-02-18 09:52:49 【问题描述】:

我有两个格式为XXXX.csv.gz_1_2.tar & XXXX.csv.gz_2_2.tar 的文件,我的目标是合并这些文件以便能够解压缩完整的文件以获取 csv 文件。

你能帮帮我吗?

我尝试使用 linux cmd 中的 tarcat 函数和 import os 类似:

import os

cat="cat C:/Users/AAAA/XXXX.csv.gz_1_2.tar C:/Users/AAAA/XXXX.csv.gz_2_2.tar > C:/Users/AAAA/XXXX.csv.gz.tar "

os.system(cat)

谢谢!

【问题讨论】:

您需要:1) 解压/解压缩 gz.tar 以从两个文件中提取 csv 文件。 (tar/gz 是压缩和存档格式)2)连接两个 csv 文本文件,考虑是否存在任何标题行(在这种情况下,您显然需要删除第二个文件的标题行)然后(可选)3 ) tar/压缩结果。 .无论如何,关于您的尝试,您不能使用cat 连接两个二进制文件(tar.gz 文件是二进制文件) 为什么要使用[linux] 标签和C: 起始路径名? Add files from one tar into another tar in python的可能重复 您可以非常轻松地调整问题中的代码和***.com/questions/17616340/…中的答案 "在 python 中将文件从一个 tar 添加到另一个 tar" 这确实不是同一个问题,但谢谢。 【参考方案1】:

下面的代码(几乎)完全是从Add files from one tar into another tar in python 窃取的,显然是使用了两个(或任意数量)原始 tar 文件。

import tarfile

old_tars = ("….tar", "….tar.gz", "….tar.xz", …)

with tarfile.open("new.tar", "w") as new_tar:
    for old_tar in (tarfile.open(tar_name, "r") for tar_name in old_tars):
        for member in old_tar.getmembers():
            new_tar.addfile(member, old_tar.extractfile(member.name))
        old_tar.close()

(当然,在现实世界的程序中,tar 文件的名称不会不被硬编码到源代码中)。

【讨论】:

以上是关于合并以 XXXXX.csv.gz_1_2.tar 和 XXXXX.csv.gz_2_2.tar 格式分块的两个文件(使用 python 或 pyspark)的主要内容,如果未能解决你的问题,请参考以下文章

处理字符串_14_SQL处理IN和合并后字符串案例详解

Python中根据文件名和后缀合并csv文件

如何在 flyway 中压缩/合并迁移

为啥需要使用合并来折叠/展开以进行条件插入?

合并_g2014___09微信开发合并

linux安装 redis(redis-3.0.2.tar.gz) 和 mongodb(mongodb-linux-x86_64-rhel62-4.0.0)