我必须将大量的XML文件压缩成文件名中的数据并将其拆分,为了便于说明,有一个解析器从XML文件中收集信息,然后将其移动到备份文件夹。我的代码需要根据文件名中的日期对其进行gzip,并将这些文件分组到压缩的.gz文件中。
请在下面找到代码:
import os
import re
import gzip
import shutil
import sys
import time
#
timestr = time.strftime("%Y%m%d%H%M")
logfile = 'D:\\Coleta\\log_compactador_xml_tar'+timestr+'.log'
ptm_dir = "D:\\PTM\\monitored_programs\\"
count_files_mdc = 0
count_files_3gpp = 0
count_tar = 0
#
for subdir, dir, files in os.walk(ptm_dir):
for file in files:
path = os.path.join(subdir, file)
try:
backup_files_dir = path.split(sep='\\')[4]
parser_id = path.split(sep='\\')[3]
if re.match('backup_files_*', backup_files_dir):
if file.endswith('xml'):
# print(time.strftime("%Y-%m-%d %H:%M:%S"), path)
data_arq = file[1:14]
if parser_id in ('parser-924'):
gzip_filename_mdc = os.path.join(subdir,'E4G_PM_MDC_IP51_'+timestr+'_'+data_arq)
with open(path, 'r')as f_in, gzip.open(gzip_filename_mdc + ".gz", 'at') as f_out_mdc:
shutil.copyfileobj(f_in, f_out_mdc)
count_files_mdc += 1
f_out_mdc.close()
f_in.close()
print(time.strftime("%Y-%m-%d %H:%M:%S"), "Compressing file MDC: ",path)
os.remove(path)
except PermissionError:
print(time.strftime("%Y-%m-%d %H:%M:%S"), "Permission error on file:", fullpath, file=logfile)
pass
except IndexError:
print(time.strftime("%Y-%m-%d %H:%M:%S"), "IndexError: ", path, file=logfile)
pass
只要我看起来它创建了一个数据流,然后压缩并将其写入具有指定文件名的新文件。但是,它不是在“.gz”文件中独立地对每个XML文件进行分组,而是在“gzip”文件中创建一个大文件(大数据流?),其输出“gzip”文件的名称相同,但是没有任何延伸。文件完全压缩后,无法解压缩“gzip”输出文件中生成的大文件。有人知道我的代码有什么问题吗?
PS:为了便于阅读,我编辑了代码。