W ramach folderu mam wiele plików .gz i w tych plikach GZ niektóre są .txt, niektóre są .CSV, niektóre są .xml lub kilka innych rozszerzeń.

Na przykład. GZ (oryginalny / skompresowany plik w plikach) w folderze będą

C:\Xiang\filename1.txt.gz (filename1.txt)
C:\Xiang\filename2.txt.gz (filename2.txt)
C:\Xiang\some_prefix_filename3.txt.gz (filename3.txt)
...
C:\Xiang\xmlfile1.xml_some_postfix.gz   (xmlfile1.xml)
C:\Xiang\yyyymmddxmlfile2.xml.gz       (xmlfile2.xml)
...
C:\Xiang\someotherName.csv.gz            (someotherName.csv)
C:\Xiang\possiblePrefixsomeotherfile1.someotherExtension.gz (someotherfile1.someotherExtension)
C:\Xiang\someotherfile2.someotherExtensionPossiblePostfix.gz (someotherfile2.someotherExtension)
...

Jak mogłem po prostu up-zip wszystkie pliki

C:\UnZipGz\filename1.txt
C:\UnZipGz\filename2.txt
C:\UnZipGz\filename3.txt
...
C:\UnZipGz\xmlfile1.xml.
C:\UnZipGz\xmlfile2.xml.
...
C:\UnZipGz\someotherName.csv.
C:\UnZipGz\someotherfile1.someotherExtension
C:\UnZipGz\someotherfile2.someotherExtension
...

Zasadniczo konwencja nazewnictwa plików GZ są zgodne z nazwami plików w środku, ale nie zawsze tak jest. W jakiś sposób zmieniają nazwę do niektórych plików .gzaki w przeszłości. Teraz nazwy plików GZ niekoniecznie pasują do nazw plików w plikach GZ.

Jak mogę wyodrębnić wszystkie pliki GZ i zachować oryginalne nazwy plików i rozszerzeń plików. I.e, niezależnie od tego, jak nazwa nazywane są pliki GZ podczas wyodrębniania plików GZ, zapisywać pliki UN-Zip w oryginalnym formacie

filename.fileExtension

W folderze C:\UnZipGz.

0
Yu Xiang 11 luty 2021, 12:26

1 odpowiedź

Najlepsza odpowiedź
import gzip
import os


INPUT_DIRECTORY = 'C:\Xiang'
OUTPUT_DIRECTORY = 'C:\UnZipGz'
GZIP_EXTENSION = '.gz'


def make_output_path(output_directory, zipped_name):
    """ Generate a path to write the unzipped file to.

    :param str output_directory: Directory to place the file in
    :param str zipped_name: Name of the zipped file
    :return str:
    """
    name_without_gzip_extension = zipped_name[:-len(GZIP_EXTENSION)]
    return os.path.join(output_directory, name_without_gzip_extension)


for file in os.scandir(INPUT_DIRECTORY):
    if not file.name.lower().endswith(GZIP_EXTENSION):
        continue

    output_path = make_output_path(OUTPUT_DIRECTORY, file.name)

    print('Decompressing', file.path, 'to', output_path)

    with gzip.open(file.path, 'rb') as file:
        with open(output_path, 'wb') as output_file:
            output_file.write(file.read())

Wyjaśnienie:

  1. Przejdź przez wszystkie pliki w folderze z odpowiednim rozszerzeniem.
  2. Wygeneruj ścieżkę do nowego katalogu bez rozszerzenia GZIP.
  3. Otwórz plik i napisz swoją dekompresję zawartości do nowej ścieżki.

Aby pobrać oryginalną nazwę pliku, możesz użyć gzinfo: https://github.com/Pierreselim/gzinfo

>>> import gzinfo
>>> info = gzinfo.read_gz_info('bar.txt.gz')
>>> info.fname
'foo.txt'

odniesienia do wyodrębniania oryginalnej nazwy pliku:

2
D Hudson 11 luty 2021, 15:21