Python:使用原始文件名和文件扩展名提取 gz 文件并保留原始文件名和文件扩展名
Python: Extract gz files with and honor original filenames and file extensions
在一个文件夹下,我有很多 .gz 文件,在这些 gz 文件中,有些是 .txt,有些是 .csv,有些是 .xml,或者其他一些扩展名。
例如gz (the original/compressed file 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)
...
我怎么能简单地将 Python 上 Windows 10 中的所有 .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文件时,只将解压后的文件原格式保存为
filename.fileExtension
进入 C:\UnZipGz
文件夹。
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())
解释:
- 遍历文件夹中具有相关扩展名的所有文件。
- 生成不带 gzip 扩展名的新目录路径。
- 打开文件并将其解压后的内容写入新路径。
要检索原始文件名,您可以使用gzinfo
:
https://github.com/PierreSelim/gzinfo
>>> import gzinfo
>>> info = gzinfo.read_gz_info('bar.txt.gz')
>>> info.fname
'foo.txt'
提取原文件名参考:
在一个文件夹下,我有很多 .gz 文件,在这些 gz 文件中,有些是 .txt,有些是 .csv,有些是 .xml,或者其他一些扩展名。
例如gz (the original/compressed file 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)
...
我怎么能简单地将 Python 上 Windows 10 中的所有 .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文件时,只将解压后的文件原格式保存为
filename.fileExtension
进入 C:\UnZipGz
文件夹。
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())
解释:
- 遍历文件夹中具有相关扩展名的所有文件。
- 生成不带 gzip 扩展名的新目录路径。
- 打开文件并将其解压后的内容写入新路径。
要检索原始文件名,您可以使用gzinfo
:
https://github.com/PierreSelim/gzinfo
>>> import gzinfo
>>> info = gzinfo.read_gz_info('bar.txt.gz')
>>> info.fname
'foo.txt'
提取原文件名参考: