我有一个存档文件 (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/