Google Cloud Storage gcsfs - 将 .tar 文件直接读入 python

Google Cloud Storage gcsfs - read a .tar file directly into python

我在 GCS 中有一个 .tar 文件,我希望能够直接将文件读入 python,而无需先在某处下载文件的中间步骤。

我在想这样的事情:

import gcsfs
fs = gcsfs.GCSFileSystem(project='my-google-project')

with fs.open('my_bucket/my_tar_file.tar', 'rb') as f:
    tarfile.open(f)

但是 f 是一个已经打开的文件连接,因此当然 .open 再次不起作用。这可能吗?

tarfile.open函数接受一个fileobj参数:

If fileobj is specified, it is used as an alternative to a file object opened in binary mode for name. It is supposed to be at position 0.

所以,这个解决方案应该有效:

import contextlib
import tarfile

import gcsfs


fs = gcsfs.GCSFileSystem(project="my-google-project")

with contextlib.closing(tarfile.open(fileobj=fs, mode='r:')) as f:
    for entry in f:
        ...

别忘了关闭您的 fs 文件。

我使用了 tar 文件库,就像@LaurentLAPORTE 所做的那样,但以不同的方式实现了它。使用对象 fs 打开 tar 文件,然后使用 tarfile.open 的文件对象并循环遍历 tar 文件成员以获取文件的内容。

import tarfile
import gcsfs

fs = gcsfs.GCSFileSystem(project="your-project-here")

with fs.open('your-bucket/test.tar') as f:
    tr = tarfile.open(fileobj=f, mode='r:')

    for member in tr.getmembers():
        f=tr.extractfile(member)
        content=f.read()
        print(content.decode('utf-8')) // add decode since output in bytes and not in utf-8 format
    tr.close()

test.tar(也上传到我的存储桶)包含 sample_file.txt,其内容为:

测试运行: