@@ -9120,6 +9120,37 @@ def ftype_to_str(ftype):
91209120 # Default to "file" if unknown
91219121 return mapping .get (ftype , "file" )
91229122
9123+ def calc_compression (fsize , fcsize , fmt = "ratio" ):
9124+ """
9125+ fsize = original size (bytes)
9126+ fcsize = compressed size (bytes) or 0/None if not compressed
9127+ fmt:
9128+ - "ratio" -> "4.00:1"
9129+ - "percent" -> "75.0%"
9130+ - "both" -> "4.00:1 (75.0%)"
9131+ """
9132+ try :
9133+ fsize = int (fsize or 0 )
9134+ fcsize = int (fcsize or 0 )
9135+ except (TypeError , ValueError ):
9136+ return "-" # unknown
9137+
9138+ # Not compressed or invalid
9139+ if fsize <= 0 or fcsize <= 0 or fcsize >= fsize :
9140+ # If fcsize==fsize, ratio is 1:1; if fcsize>fsize, "expanded"
9141+ if fsize > 0 and fcsize == fsize :
9142+ return "1.00:1" if fmt == "ratio" else ("0.0%" if fmt == "percent" else "1.00:1 (0.0%)" )
9143+ return "-" # treat as not compressed / unknown
9144+
9145+ ratio = fsize / fcsize
9146+ savings = (1.0 - (fcsize / fsize )) * 100.0
9147+
9148+ if fmt == "ratio" :
9149+ return f"{ ratio :.2f} :1"
9150+ if fmt == "percent" :
9151+ return f"{ savings :.1f} %"
9152+ return f"{ ratio :.2f} :1 ({ savings :.1f} %)"
9153+
91239154def CatFileListFiles (infile , fmttype = "auto" , filestart = 0 , seekstart = 0 , seekend = 0 , skipchecksum = False , formatspecs = __file_format_multi_dict__ , saltkey = None , seektoend = False , verbose = False , newstyle = False , returnfp = False ):
91249155 if (isinstance (infile , dict )):
91259156 listarrayfileslist = [infile ]
@@ -9128,7 +9159,7 @@ def CatFileListFiles(infile, fmttype="auto", filestart=0, seekstart=0, seekend=0
91289159 else :
91299160 if (infile != "-" and not hasattr (infile , "read" ) and not hasattr (infile , "write" ) and not isinstance (infile , bytes )):
91309161 infile = RemoveWindowsPath (infile )
9131- listarrayfileslist = CatFileToArray (infile , fmttype , filestart , seekstart , seekend , True , False , False , skipchecksum , formatspecs , saltkey , seektoend , returnfp )
9162+ listarrayfileslist = ArchiveFileToArray (infile , fmttype , filestart , seekstart , seekend , True , False , False , skipchecksum , formatspecs , saltkey , seektoend , returnfp )
91329163 if (not listarrayfileslist ):
91339164 return False
91349165 for listarrayfiles in listarrayfileslist :
@@ -9162,14 +9193,23 @@ def CatFileListFiles(infile, fmttype="auto", filestart=0, seekstart=0, seekend=0
91629193 if (len (fgprint ) <= 0 ):
91639194 fgprint = listarrayfiles ['ffilelist' ][lcfi ]['fgid' ]
91649195 if (newstyle ):
9165- VerbosePrintOut (ftype_to_str (listarrayfiles ['ffilelist' ][lcfi ]['ftype' ]) + "\t " + listarrayfiles ['ffilelist' ][lcfi ]['fcompression' ] + "\t " + str (
9166- listarrayfiles ['ffilelist' ][lcfi ]['fsize' ]).rjust (15 ) + "\t " + printfname )
9196+ compratio = calc_compression (listarrayfiles ['ffilelist' ][lcfi ]['fsize' ], listarrayfiles ['ffilelist' ][lcfi ]['fcsize' ], "percent" )
9197+ if (compratio == "-" ):
9198+ compratio = "\t "
9199+ else :
9200+ compratio = "\t " + compratio
9201+ if (listarrayfiles ['ffilelist' ][lcfi ]['fsize' ]== 0 ):
9202+ compressprint = str ("0" ).rjust (15 ) + "\t "
9203+ else :
9204+ compressprint = str (listarrayfiles ['ffilelist' ][lcfi ]['fcsize' ]).rjust (15 ) + "\t "
9205+ VerbosePrintOut (ftype_to_str (listarrayfiles ['ffilelist' ][lcfi ]['ftype' ]) + "\t " + listarrayfiles ['ffilelist' ][lcfi ]['fcompression' ] + compratio + "\t " + str (
9206+ listarrayfiles ['ffilelist' ][lcfi ]['fsize' ]).rjust (15 ) + "\t " + compressprint + printfname )
91679207 else :
91689208 ts_ns = listarrayfiles ['ffilelist' ][lcfi ]['fmtime' ]
91699209 sec , ns = divmod (int (ts_ns ), 10 ** 9 )
91709210 dt = datetime .datetime .utcfromtimestamp (sec ).replace (microsecond = ns // 1000 )
9171- VerbosePrintOut (PrintPermissionString (listarrayfiles ['ffilelist' ][lcfi ]['fmode' ], listarrayfiles ['ffilelist' ][lcfi ]['ftype' ]) + " " + str (fuprint ) + "/" + str (fgprint ) + " " + str (
9172- listarrayfiles ['ffilelist' ][lcfi ]['fsize' ]).rjust (15 ) + " " + dt .strftime ('%Y-%m-%d %H:%M' ) + " " + printfname )
9211+ VerbosePrintOut (PrintPermissionString (listarrayfiles ['ffilelist' ][lcfi ]['fmode' ], listarrayfiles ['ffilelist' ][lcfi ]['ftype' ]) + "\t " + str (fuprint ) + "/" + str (fgprint ) + "\t " + str (
9212+ listarrayfiles ['ffilelist' ][lcfi ]['fsize' ]).rjust (15 ) + "\t " + dt .strftime ('%Y-%m-%d %H:%M' ) + "\t " + printfname )
91739213 lcfi = lcfi + 1
91749214 if (returnfp ):
91759215 return listarrayfiles ['fp' ]
@@ -9344,8 +9384,8 @@ def TarFileListFiles(infile, formatspecs=__file_format_multi_dict__, verbose=Fal
93449384 fgprint = member .gname
93459385 if (len (fgprint ) <= 0 ):
93469386 fgprint = member .gid
9347- VerbosePrintOut (PrintPermissionString (ffullmode , ftype ) + " " + str (fuprint ) + "/" + str (fgprint ) + " " + str (
9348- member .size ).rjust (15 ) + " " + datetime .datetime .utcfromtimestamp (member .mtime ).strftime ('%Y-%m-%d %H:%M' ) + " " + printfname )
9387+ VerbosePrintOut (PrintPermissionString (ffullmode , ftype ) + "\t " + str (fuprint ) + "/" + str (fgprint ) + "\t " + str (
9388+ member .size ).rjust (15 ) + "\t " + datetime .datetime .utcfromtimestamp (member .mtime ).strftime ('%Y-%m-%d %H:%M' ) + "\t " + printfname )
93499389 lcfi = lcfi + 1
93509390 if (returnfp ):
93519391 return listarrayfiles ['fp' ]
@@ -9502,8 +9542,8 @@ def ZipFileListFiles(infile, verbose=False, returnfp=False):
95029542 fgprint = fgname
95039543 if (len (fgprint ) <= 0 ):
95049544 fgprint = str (fgid )
9505- VerbosePrintOut (PrintPermissionString (fmode , ftype ) + " " + str (fuprint ) + "/" + str (fgprint ) + " " + str (member .file_size ).rjust (
9506- 15 ) + " " + datetime .datetime .utcfromtimestamp (int (get_unix_timestamp_zip (zipinfo ))).strftime ('%Y-%m-%d %H:%M' ) + " " + printfname )
9545+ VerbosePrintOut (PrintPermissionString (fmode , ftype ) + "\t " + str (fuprint ) + "/" + str (fgprint ) + "\t " + str (member .file_size ).rjust (
9546+ 15 ) + "\t " + datetime .datetime .utcfromtimestamp (int (get_unix_timestamp_zip (zipinfo ))).strftime ('%Y-%m-%d %H:%M' ) + "\t " + printfname )
95079547 lcfi = lcfi + 1
95089548 if (returnfp ):
95099549 return listarrayfiles ['fp' ]
@@ -9635,8 +9675,8 @@ def RarFileListFiles(infile, verbose=False, returnfp=False):
96359675 fgprint = fgname
96369676 if (len (fgprint ) <= 0 ):
96379677 fgprint = str (fgid )
9638- VerbosePrintOut (PrintPermissionString (fmode , ftype ) + " " + str (fuprint ) + "/" + str (fgprint ) + " " + str (
9639- member .file_size ).rjust (15 ) + " " + member .mtime .strftime ('%Y-%m-%d %H:%M' ) + " " + printfname )
9678+ VerbosePrintOut (PrintPermissionString (fmode , ftype ) + "\t " + str (fuprint ) + "/" + str (fgprint ) + "\t " + str (
9679+ member .file_size ).rjust (15 ) + "\t " + member .mtime .strftime ('%Y-%m-%d %H:%M' ) + "\t " + printfname )
96409680 lcfi = lcfi + 1
96419681 if (returnfp ):
96429682 return listarrayfiles ['fp' ]
@@ -9748,8 +9788,8 @@ def SevenZipFileListFiles(infile, verbose=False, returnfp=False):
97489788 fgprint = fgname
97499789 if (len (fgprint ) <= 0 ):
97509790 fgprint = str (fgid )
9751- VerbosePrintOut (PrintPermissionString (fmode , ftype ) + " " + str (fuprint ) + "/" + str (fgprint ) + " " + str (
9752- fsize ).rjust (15 ) + " " + member .creationtime .strftime ('%Y-%m-%d %H:%M' ) + " " + printfname )
9791+ VerbosePrintOut (PrintPermissionString (fmode , ftype ) + "\t " + str (fuprint ) + "/" + str (fgprint ) + "\t " + str (
9792+ fsize ).rjust (15 ) + "\t " + member .creationtime .strftime ('%Y-%m-%d %H:%M' ) + "\t " + printfname )
97539793 lcfi = lcfi + 1
97549794 if (returnfp ):
97559795 return listarrayfiles ['fp' ]
0 commit comments