在 .tar 中的 .gz 中提取文件,而不解压缩这两个文件
Extract file inside a .gz that's inside a .tar without unzipping the two
我需要从单个 .tar 文件中的多个 .gz 文件中提取 .tex 文件。我编写了一些成功执行此操作的代码,但我正在解压缩 .tar 和每个 .gz 文件。有没有办法避免做这么多解压缩?我想直接导航到 .tex 文件并只提取这些文件。
def extractFile(filename):
tar = tarfile.open(filename)
for item in tar:
# Extract from .tar into 'temp' subfolder only if .gz
if item.name.endswith('.gz'):
item.name = os.path.basename(item.name) # reset path to remove parent directories like '0001'
if not os.path.isdir('temp'):
os.makedirs('temp')
tar.extract(item, path='temp')
# Extract from .gz into 'temp' subfolder only if .tex
try:
gz = tarfile.open('temp/' + item.name, mode='r:gz')
for file in gz:
if file.name.endswith('.tex'):
gz.extract(file, path='latex')
except tarfile.ReadError:
# Move to 'error' folder, ensuring it exists
if not os.path.isdir('error'):
os.makedirs('error')
os.rename('temp/' + item.name, 'error/' + item.name)
我能够在评论的帮助下回答我的问题。 (谢谢!)我的代码现在从单个 .tar 文件中的多个 .gz 文件中提取 .tex 文件,而无需 unzipping/saving 每个 .gz 文件到计算机。
def extractFile(filename):
tar = tarfile.open(filename)
for subfile in tar.getmembers():
# Open subfile only if .gz
if subfile.name.endswith('.gz'):
try:
gz = tar.extractfile(subfile)
gz = tarfile.open(fileobj=gz)
# Extract file from .gz into 'latex' subfolder only if .tex
for subsubfile in gz.getmembers():
if subsubfile.name.endswith('.tex'):
gz.extract(subsubfile, path='latex')
except tarfile.ReadError:
# Add subfile name to error log
with open('error_log.txt', 'a') as log:
log.write(subfile.name + '\n')
我需要从单个 .tar 文件中的多个 .gz 文件中提取 .tex 文件。我编写了一些成功执行此操作的代码,但我正在解压缩 .tar 和每个 .gz 文件。有没有办法避免做这么多解压缩?我想直接导航到 .tex 文件并只提取这些文件。
def extractFile(filename):
tar = tarfile.open(filename)
for item in tar:
# Extract from .tar into 'temp' subfolder only if .gz
if item.name.endswith('.gz'):
item.name = os.path.basename(item.name) # reset path to remove parent directories like '0001'
if not os.path.isdir('temp'):
os.makedirs('temp')
tar.extract(item, path='temp')
# Extract from .gz into 'temp' subfolder only if .tex
try:
gz = tarfile.open('temp/' + item.name, mode='r:gz')
for file in gz:
if file.name.endswith('.tex'):
gz.extract(file, path='latex')
except tarfile.ReadError:
# Move to 'error' folder, ensuring it exists
if not os.path.isdir('error'):
os.makedirs('error')
os.rename('temp/' + item.name, 'error/' + item.name)
我能够在评论的帮助下回答我的问题。 (谢谢!)我的代码现在从单个 .tar 文件中的多个 .gz 文件中提取 .tex 文件,而无需 unzipping/saving 每个 .gz 文件到计算机。
def extractFile(filename):
tar = tarfile.open(filename)
for subfile in tar.getmembers():
# Open subfile only if .gz
if subfile.name.endswith('.gz'):
try:
gz = tar.extractfile(subfile)
gz = tarfile.open(fileobj=gz)
# Extract file from .gz into 'latex' subfolder only if .tex
for subsubfile in gz.getmembers():
if subsubfile.name.endswith('.tex'):
gz.extract(subsubfile, path='latex')
except tarfile.ReadError:
# Add subfile name to error log
with open('error_log.txt', 'a') as log:
log.write(subfile.name + '\n')