@@ -9121,6 +9121,37 @@ def ftype_to_str(ftype):
91219121 # Default to "file" if unknown
91229122 return mapping .get (ftype , "file" )
91239123
9124+ def calc_compression (fsize , fcsize , fmt = "ratio" ):
9125+ """
9126+ fsize = original size (bytes)
9127+ fcsize = compressed size (bytes) or 0/None if not compressed
9128+ fmt:
9129+ - "ratio" -> "4.00:1"
9130+ - "percent" -> "75.0%"
9131+ - "both" -> "4.00:1 (75.0%)"
9132+ """
9133+ try :
9134+ fsize = int (fsize or 0 )
9135+ fcsize = int (fcsize or 0 )
9136+ except (TypeError , ValueError ):
9137+ return "-" # unknown
9138+
9139+ # Not compressed or invalid
9140+ if fsize <= 0 or fcsize <= 0 or fcsize >= fsize :
9141+ # If fcsize==fsize, ratio is 1:1; if fcsize>fsize, "expanded"
9142+ if fsize > 0 and fcsize == fsize :
9143+ return "1.00:1" if fmt == "ratio" else ("0.0%" if fmt == "percent" else "1.00:1 (0.0%)" )
9144+ return "-" # treat as not compressed / unknown
9145+
9146+ ratio = fsize / fcsize
9147+ savings = (1.0 - (fcsize / fsize )) * 100.0
9148+
9149+ if fmt == "ratio" :
9150+ return f"{ ratio :.2f} :1"
9151+ if fmt == "percent" :
9152+ return f"{ savings :.1f} %"
9153+ return f"{ ratio :.2f} :1 ({ savings :.1f} %)"
9154+
91249155def FoxFileListFiles (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 ):
91259156 if (isinstance (infile , dict )):
91269157 listarrayfileslist = [infile ]
@@ -9129,7 +9160,7 @@ def FoxFileListFiles(infile, fmttype="auto", filestart=0, seekstart=0, seekend=0
91299160 else :
91309161 if (infile != "-" and not hasattr (infile , "read" ) and not hasattr (infile , "write" ) and not isinstance (infile , bytes )):
91319162 infile = RemoveWindowsPath (infile )
9132- listarrayfileslist = FoxFileToArray (infile , fmttype , filestart , seekstart , seekend , True , False , False , skipchecksum , formatspecs , saltkey , seektoend , returnfp )
9163+ listarrayfileslist = ArchiveFileToArray (infile , fmttype , filestart , seekstart , seekend , True , False , False , skipchecksum , formatspecs , saltkey , seektoend , returnfp )
91339164 if (not listarrayfileslist ):
91349165 return False
91359166 for listarrayfiles in listarrayfileslist :
@@ -9163,14 +9194,23 @@ def FoxFileListFiles(infile, fmttype="auto", filestart=0, seekstart=0, seekend=0
91639194 if (len (fgprint ) <= 0 ):
91649195 fgprint = listarrayfiles ['ffilelist' ][lcfi ]['fgid' ]
91659196 if (newstyle ):
9166- VerbosePrintOut (ftype_to_str (listarrayfiles ['ffilelist' ][lcfi ]['ftype' ]) + "\t " + listarrayfiles ['ffilelist' ][lcfi ]['fcompression' ] + "\t " + str (
9167- listarrayfiles ['ffilelist' ][lcfi ]['fsize' ]).rjust (15 ) + "\t " + printfname )
9197+ compratio = calc_compression (listarrayfiles ['ffilelist' ][lcfi ]['fsize' ], listarrayfiles ['ffilelist' ][lcfi ]['fcsize' ], "percent" )
9198+ if (compratio == "-" ):
9199+ compratio = "\t "
9200+ else :
9201+ compratio = "\t " + compratio
9202+ if (listarrayfiles ['ffilelist' ][lcfi ]['fsize' ]== 0 ):
9203+ compressprint = str ("0" ).rjust (15 ) + "\t "
9204+ else :
9205+ compressprint = str (listarrayfiles ['ffilelist' ][lcfi ]['fcsize' ]).rjust (15 ) + "\t "
9206+ VerbosePrintOut (ftype_to_str (listarrayfiles ['ffilelist' ][lcfi ]['ftype' ]) + "\t " + listarrayfiles ['ffilelist' ][lcfi ]['fcompression' ] + compratio + "\t " + str (
9207+ listarrayfiles ['ffilelist' ][lcfi ]['fsize' ]).rjust (15 ) + "\t " + compressprint + printfname )
91689208 else :
91699209 ts_ns = listarrayfiles ['ffilelist' ][lcfi ]['fmtime' ]
91709210 sec , ns = divmod (int (ts_ns ), 10 ** 9 )
91719211 dt = datetime .datetime .utcfromtimestamp (sec ).replace (microsecond = ns // 1000 )
9172- VerbosePrintOut (PrintPermissionString (listarrayfiles ['ffilelist' ][lcfi ]['fmode' ], listarrayfiles ['ffilelist' ][lcfi ]['ftype' ]) + " " + str (fuprint ) + "/" + str (fgprint ) + " " + str (
9173- listarrayfiles ['ffilelist' ][lcfi ]['fsize' ]).rjust (15 ) + " " + dt .strftime ('%Y-%m-%d %H:%M' ) + " " + printfname )
9212+ VerbosePrintOut (PrintPermissionString (listarrayfiles ['ffilelist' ][lcfi ]['fmode' ], listarrayfiles ['ffilelist' ][lcfi ]['ftype' ]) + "\t " + str (fuprint ) + "/" + str (fgprint ) + "\t " + str (
9213+ listarrayfiles ['ffilelist' ][lcfi ]['fsize' ]).rjust (15 ) + "\t " + dt .strftime ('%Y-%m-%d %H:%M' ) + "\t " + printfname )
91749214 lcfi = lcfi + 1
91759215 if (returnfp ):
91769216 return listarrayfiles ['fp' ]
@@ -9345,8 +9385,8 @@ def TarFileListFiles(infile, formatspecs=__file_format_multi_dict__, verbose=Fal
93459385 fgprint = member .gname
93469386 if (len (fgprint ) <= 0 ):
93479387 fgprint = member .gid
9348- VerbosePrintOut (PrintPermissionString (ffullmode , ftype ) + " " + str (fuprint ) + "/" + str (fgprint ) + " " + str (
9349- member .size ).rjust (15 ) + " " + datetime .datetime .utcfromtimestamp (member .mtime ).strftime ('%Y-%m-%d %H:%M' ) + " " + printfname )
9388+ VerbosePrintOut (PrintPermissionString (ffullmode , ftype ) + "\t " + str (fuprint ) + "/" + str (fgprint ) + "\t " + str (
9389+ member .size ).rjust (15 ) + "\t " + datetime .datetime .utcfromtimestamp (member .mtime ).strftime ('%Y-%m-%d %H:%M' ) + "\t " + printfname )
93509390 lcfi = lcfi + 1
93519391 if (returnfp ):
93529392 return listarrayfiles ['fp' ]
@@ -9503,8 +9543,8 @@ def ZipFileListFiles(infile, verbose=False, returnfp=False):
95039543 fgprint = fgname
95049544 if (len (fgprint ) <= 0 ):
95059545 fgprint = str (fgid )
9506- VerbosePrintOut (PrintPermissionString (fmode , ftype ) + " " + str (fuprint ) + "/" + str (fgprint ) + " " + str (member .file_size ).rjust (
9507- 15 ) + " " + datetime .datetime .utcfromtimestamp (int (get_unix_timestamp_zip (zipinfo ))).strftime ('%Y-%m-%d %H:%M' ) + " " + printfname )
9546+ VerbosePrintOut (PrintPermissionString (fmode , ftype ) + "\t " + str (fuprint ) + "/" + str (fgprint ) + "\t " + str (member .file_size ).rjust (
9547+ 15 ) + "\t " + datetime .datetime .utcfromtimestamp (int (get_unix_timestamp_zip (zipinfo ))).strftime ('%Y-%m-%d %H:%M' ) + "\t " + printfname )
95089548 lcfi = lcfi + 1
95099549 if (returnfp ):
95109550 return listarrayfiles ['fp' ]
@@ -9636,8 +9676,8 @@ def RarFileListFiles(infile, verbose=False, returnfp=False):
96369676 fgprint = fgname
96379677 if (len (fgprint ) <= 0 ):
96389678 fgprint = str (fgid )
9639- VerbosePrintOut (PrintPermissionString (fmode , ftype ) + " " + str (fuprint ) + "/" + str (fgprint ) + " " + str (
9640- member .file_size ).rjust (15 ) + " " + member .mtime .strftime ('%Y-%m-%d %H:%M' ) + " " + printfname )
9679+ VerbosePrintOut (PrintPermissionString (fmode , ftype ) + "\t " + str (fuprint ) + "/" + str (fgprint ) + "\t " + str (
9680+ member .file_size ).rjust (15 ) + "\t " + member .mtime .strftime ('%Y-%m-%d %H:%M' ) + "\t " + printfname )
96419681 lcfi = lcfi + 1
96429682 if (returnfp ):
96439683 return listarrayfiles ['fp' ]
@@ -9749,8 +9789,8 @@ def SevenZipFileListFiles(infile, verbose=False, returnfp=False):
97499789 fgprint = fgname
97509790 if (len (fgprint ) <= 0 ):
97519791 fgprint = str (fgid )
9752- VerbosePrintOut (PrintPermissionString (fmode , ftype ) + " " + str (fuprint ) + "/" + str (fgprint ) + " " + str (
9753- fsize ).rjust (15 ) + " " + member .creationtime .strftime ('%Y-%m-%d %H:%M' ) + " " + printfname )
9792+ VerbosePrintOut (PrintPermissionString (fmode , ftype ) + "\t " + str (fuprint ) + "/" + str (fgprint ) + "\t " + str (
9793+ fsize ).rjust (15 ) + "\t " + member .creationtime .strftime ('%Y-%m-%d %H:%M' ) + "\t " + printfname )
97549794 lcfi = lcfi + 1
97559795 if (returnfp ):
97569796 return listarrayfiles ['fp' ]
0 commit comments