Python:使用原始文件名和文件扩展名提取gz文件

2024-09-29 01:26:39 发布

您现在位置:Python中文网/ 问答频道 /正文

在一个文件夹下,我有许多.gz文件,在这些gz文件中,有些是.txt,有些是.csv,有些是.xml,或者其他一些扩展名

例如,文件夹中的gz(原始/压缩文件in())文件将

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)
...

我如何简单地将Windows 10上Python中的所有.gz文件压缩到文件夹C:\Xiang下,并保存到文件夹C:\UnZipGz中,尊重原始文件名,结果如下:

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
...

通常,gz文件命名约定与内部文件的文件名一致,但情况并非总是如此。不知何故,重命名到某些.gz文件是在过去发生的。现在,gz文件名不一定与gz文件中的文件名匹配

如何提取所有gz文件并保留原始文件名和扩展名。即,无论gz文件如何命名,在提取gz文件时,仅将原始格式的un-zip文件保存为

filename.fileExtension

进入C:\UnZipGz文件夹


Tags: 文件csvtxt文件夹文件名xmlgzfilename1
1条回答
网友
1楼 · 发布于 2024-09-29 01:26:39
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())

说明:

  1. 使用相关扩展名遍历文件夹中的所有文件
  2. 生成新目录的路径(不带gzip扩展名)
  3. 打开文件并将其解压缩内容写入新路径

要检索原始文件名,可以使用gzinfohttps://github.com/PierreSelim/gzinfo

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

提取原始文件名的引用:

相关问题 更多 >