import glob, os, re, tarfile
# Setup main paths.
tarfile_rootdir = r'D:\SPRING2019\Tarfiles'
extract_rootdir = r'D:\SPRING2019\Test'
# Process the files.
re_pattern = re.compile(r'\A(\w+)-\d+[a-zA-Z]0{0,5}(\d+)')
for tar_file in glob.iglob(os.path.join(tarfile_rootdir, '*.tgz')):
# Get the parts from the base tgz filename using regular expressions.
part = re.findall(re_pattern, os.path.basename(tar_file))[0]
# Build the extraction path from each part.
extract_path = os.path.join(extract_rootdir, *part)
# Perform the extract of all files from the zipfile.
with tarfile.open(tar_file, 'r:gz') as r:
r.extractall(extract_path)
Этот код основан на
ответ
на ваш последний вопрос. Из-за неопределенной информации о
структура каталогов, я предоставлю структуру как
Пример.
TGZ-файлы в D:\SPRING2019\Tarfiles
:
DZB1216-500058L002001.tgz
DZB1216-500058L003001.tgz
Извлечение структуры каталогов в D:\SPRING2019\Test
:
DZB1216
2001
3001
Пути к файлам .tgz
извлекаются с помощью glob
.
Из примера имени файла: DZB1216-500058L002001.tgz
,
регулярное выражение будет захватывать 2 группы:
\A
- это якорь в начале строки.
Это не группа .
(\w+)
, чтобы соответствовать DZB1216
.
Это 1-я группа .
-\d+[a-zA-Z]0{0,5}
соответствует следующей группе.
Это не группа .
(\d+)
, чтобы соответствовать 2001
.
Это 2-я группа .
Путь извлечения объединяется с использованием значений
extract_rootdir
, DZB1216
и 2001
.
Это приводит к D:\SPRING2019\Test\DZB1216\2001
в качестве пути извлечения.
Использование tarfile
извлечет все из файла .tgz
.