我正在尝试获取mime类型,使用下一个代码读取和解析一些存档文件:
archive_file.tar.gz ---> file.csv,file.json,file.xlsx等
def parse_tar_gzip(element):
from my_lib import parse_file
from my_lib import NestedArchives
try:
tar = tarfile.open(fileobj=element, mode="r")
except tarfile.ReadError:
raise NestedArchives(element)
else:
for mem in tar.getmembers():
if mem.isfile():
my_mems = mem.name.split("/")[-1]
if not my_mems.startswith("."):
my_file = tar.extractfile(mem)
# my_mime = mimetypes.guess_type(my_file)
print(my_file)
# yield "", parse_file(my_file)
with open('/Users/my_name/Downloads/archive_file.tar.gz', 'rb') as my_files:
blabla = parse_tar_gzip(my_files)
print(blabla)
问题是,my_file
返回为名称为ExFileObject
的archive_file.tar.gz
,而不是以下档案库中文件的名称(例如:file.json
或file.xlsx
):
<ExFileObject name='/Users/my_name/Downloads/archive_file.tar.gz'>
<ExFileObject name='/Users/my_name/Downloads/archive_file.tar.gz'>
<ExFileObject name='/Users/my_name/Downloads/archive_file.tar.gz'>
<ExFileObject name='/Users/my_name/Downloads/archive_file.tar.gz'>
extractfile
不能返回存档内文件的名称吗?这很奇怪,因为当我使用python2.x时,文件名...
ExFileObject
是从基础文件句柄到压缩包的构造,而无需知道要提取的成员(只是告诉了要提取的成员的偏移量,大小和稀疏性)。因此,它不知道要提取的事物的名称,它仅具有原始tarball的名称,如图所示。
考虑到应该假设.name
告诉您打开文件对象的文件系统名称,这样做可能是正确的,即使有些误导;您没有基于成员名称的实际文件系统对象的句柄,而只有tarball本身的句柄。调用extractfile
时,您就可以访问该名称,因此,如果需要,请保留该信息。 extractfile
的要点是获取数据,而不是毕竟存储它的名称。