python - pandas 可以在存档中读取和存档吗?

标签 python pandas tarfile

我有一个存档文件 (archive.tar.gz),其中包含多个存档文件 (file.txt.gz)。

如果我首先将 .txt.gz 文件提取到一个文件夹,然后我可以直接使用 pandas 打开它们:

import pandas as pd

df = pd.read_csv('file.txt.gz', sep='\t', encoding='utf-8')

但是如果我使用 tarfile 库探索存档,那么它就不起作用:

import pandas as pd
import tarfile

tar = tarfile.open("archive.tar.gz", "r:*")
csv_path = tar.getnames()[1]
df = pd.read_csv(tar.extractfile(csv_path), sep='\t', encoding='utf-8')

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte

可以这样做吗?

最佳答案

当您按文件名打开文件时,Pandas 将能够根据文件名的 *.gz 扩展名推断该文件是使用 gzip 压缩的。

当你向它传递一个文件对象时,你需要明确地告诉它压缩情况,以便它在读取文件时可以解压缩。

这应该有效:

df = pd.read_csv(
    tar.extractfile(csv_path),
    compression='gzip',
    sep='\t',
    encoding='utf-8')

有关更多详细信息,请参阅 read_csv() 文档中有关“压缩”参数的条目.

关于python - pandas 可以在存档中读取和存档吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60346002/

相关文章:

python - 如何使用 pandas 选择组中的前一行?

python - 如何在 Python 3 中从字节缓冲区构造内存中的 TarFile 对象?

Python 异或错误

python - 为什么将列表初始化为空而不是具有预定大小是 Pythonic 的?

Python:以最有效的方式合并许多数据框

python - 使用 pandas python 函数根据其他列的值添加新列

python - Pandas DataFrame 列命名约定

Python 修补现有类

python - 使用 `tarfile` 提取存档时出错

python - 将 .readinto(b) 方法添加到 tarfile 的 ExFileObject 中?