@@ -9114,6 +9114,37 @@ def ftype_to_str(ftype):
91149114 # Default to "file" if unknown
91159115 return mapping .get (ftype , "file" )
91169116
9117+ def calc_compression (fsize , fcsize , fmt = "ratio" ):
9118+ """
9119+ fsize = original size (bytes)
9120+ fcsize = compressed size (bytes) or 0/None if not compressed
9121+ fmt:
9122+ - "ratio" -> "4.00:1"
9123+ - "percent" -> "75.0%"
9124+ - "both" -> "4.00:1 (75.0%)"
9125+ """
9126+ try :
9127+ fsize = int (fsize or 0 )
9128+ fcsize = int (fcsize or 0 )
9129+ except (TypeError , ValueError ):
9130+ return "-" # unknown
9131+
9132+ # Not compressed or invalid
9133+ if fsize <= 0 or fcsize <= 0 or fcsize >= fsize :
9134+ # If fcsize==fsize, ratio is 1:1; if fcsize>fsize, "expanded"
9135+ if fsize > 0 and fcsize == fsize :
9136+ return "1.00:1" if fmt == "ratio" else ("0.0%" if fmt == "percent" else "1.00:1 (0.0%)" )
9137+ return "-" # treat as not compressed / unknown
9138+
9139+ ratio = fsize / fcsize
9140+ savings = (1.0 - (fcsize / fsize )) * 100.0
9141+
9142+ if fmt == "ratio" :
9143+ return f"{ ratio :.2f} :1"
9144+ if fmt == "percent" :
9145+ return f"{ savings :.1f} %"
9146+ return f"{ ratio :.2f} :1 ({ savings :.1f} %)"
9147+
91179148def NeoFileListFiles (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 ):
91189149 if (isinstance (infile , dict )):
91199150 listarrayfileslist = [infile ]
@@ -9122,7 +9153,7 @@ def NeoFileListFiles(infile, fmttype="auto", filestart=0, seekstart=0, seekend=0
91229153 else :
91239154 if (infile != "-" and not hasattr (infile , "read" ) and not hasattr (infile , "write" ) and not isinstance (infile , bytes )):
91249155 infile = RemoveWindowsPath (infile )
9125- listarrayfileslist = NeoFileToArray (infile , fmttype , filestart , seekstart , seekend , True , False , False , skipchecksum , formatspecs , saltkey , seektoend , returnfp )
9156+ listarrayfileslist = ArchiveFileToArray (infile , fmttype , filestart , seekstart , seekend , True , False , False , skipchecksum , formatspecs , saltkey , seektoend , returnfp )
91269157 if (not listarrayfileslist ):
91279158 return False
91289159 for listarrayfiles in listarrayfileslist :
@@ -9156,14 +9187,23 @@ def NeoFileListFiles(infile, fmttype="auto", filestart=0, seekstart=0, seekend=0
91569187 if (len (fgprint ) <= 0 ):
91579188 fgprint = listarrayfiles ['ffilelist' ][lcfi ]['fgid' ]
91589189 if (newstyle ):
9159- VerbosePrintOut (ftype_to_str (listarrayfiles ['ffilelist' ][lcfi ]['ftype' ]) + "\t " + listarrayfiles ['ffilelist' ][lcfi ]['fcompression' ] + "\t " + str (
9160- listarrayfiles ['ffilelist' ][lcfi ]['fsize' ]).rjust (15 ) + "\t " + printfname )
9190+ compratio = calc_compression (listarrayfiles ['ffilelist' ][lcfi ]['fsize' ], listarrayfiles ['ffilelist' ][lcfi ]['fcsize' ], "percent" )
9191+ if (compratio == "-" ):
9192+ compratio = "\t "
9193+ else :
9194+ compratio = "\t " + compratio
9195+ if (listarrayfiles ['ffilelist' ][lcfi ]['fsize' ]== 0 ):
9196+ compressprint = str ("0" ).rjust (15 ) + "\t "
9197+ else :
9198+ compressprint = str (listarrayfiles ['ffilelist' ][lcfi ]['fcsize' ]).rjust (15 ) + "\t "
9199+ VerbosePrintOut (ftype_to_str (listarrayfiles ['ffilelist' ][lcfi ]['ftype' ]) + "\t " + listarrayfiles ['ffilelist' ][lcfi ]['fcompression' ] + compratio + "\t " + str (
9200+ listarrayfiles ['ffilelist' ][lcfi ]['fsize' ]).rjust (15 ) + "\t " + compressprint + printfname )
91619201 else :
91629202 ts_ns = listarrayfiles ['ffilelist' ][lcfi ]['fmtime' ]
91639203 sec , ns = divmod (int (ts_ns ), 10 ** 9 )
91649204 dt = datetime .datetime .utcfromtimestamp (sec ).replace (microsecond = ns // 1000 )
9165- VerbosePrintOut (PrintPermissionString (listarrayfiles ['ffilelist' ][lcfi ]['fmode' ], listarrayfiles ['ffilelist' ][lcfi ]['ftype' ]) + " " + str (fuprint ) + "/" + str (fgprint ) + " " + str (
9166- listarrayfiles ['ffilelist' ][lcfi ]['fsize' ]).rjust (15 ) + " " + dt .strftime ('%Y-%m-%d %H:%M' ) + " " + printfname )
9205+ VerbosePrintOut (PrintPermissionString (listarrayfiles ['ffilelist' ][lcfi ]['fmode' ], listarrayfiles ['ffilelist' ][lcfi ]['ftype' ]) + "\t " + str (fuprint ) + "/" + str (fgprint ) + "\t " + str (
9206+ listarrayfiles ['ffilelist' ][lcfi ]['fsize' ]).rjust (15 ) + "\t " + dt .strftime ('%Y-%m-%d %H:%M' ) + "\t " + printfname )
91679207 lcfi = lcfi + 1
91689208 if (returnfp ):
91699209 return listarrayfiles ['fp' ]
@@ -9338,8 +9378,8 @@ def TarFileListFiles(infile, formatspecs=__file_format_multi_dict__, verbose=Fal
93389378 fgprint = member .gname
93399379 if (len (fgprint ) <= 0 ):
93409380 fgprint = member .gid
9341- VerbosePrintOut (PrintPermissionString (ffullmode , ftype ) + " " + str (fuprint ) + "/" + str (fgprint ) + " " + str (
9342- member .size ).rjust (15 ) + " " + datetime .datetime .utcfromtimestamp (member .mtime ).strftime ('%Y-%m-%d %H:%M' ) + " " + printfname )
9381+ VerbosePrintOut (PrintPermissionString (ffullmode , ftype ) + "\t " + str (fuprint ) + "/" + str (fgprint ) + "\t " + str (
9382+ member .size ).rjust (15 ) + "\t " + datetime .datetime .utcfromtimestamp (member .mtime ).strftime ('%Y-%m-%d %H:%M' ) + "\t " + printfname )
93439383 lcfi = lcfi + 1
93449384 if (returnfp ):
93459385 return listarrayfiles ['fp' ]
@@ -9496,8 +9536,8 @@ def ZipFileListFiles(infile, verbose=False, returnfp=False):
94969536 fgprint = fgname
94979537 if (len (fgprint ) <= 0 ):
94989538 fgprint = str (fgid )
9499- VerbosePrintOut (PrintPermissionString (fmode , ftype ) + " " + str (fuprint ) + "/" + str (fgprint ) + " " + str (member .file_size ).rjust (
9500- 15 ) + " " + datetime .datetime .utcfromtimestamp (int (get_unix_timestamp_zip (zipinfo ))).strftime ('%Y-%m-%d %H:%M' ) + " " + printfname )
9539+ VerbosePrintOut (PrintPermissionString (fmode , ftype ) + "\t " + str (fuprint ) + "/" + str (fgprint ) + "\t " + str (member .file_size ).rjust (
9540+ 15 ) + "\t " + datetime .datetime .utcfromtimestamp (int (get_unix_timestamp_zip (zipinfo ))).strftime ('%Y-%m-%d %H:%M' ) + "\t " + printfname )
95019541 lcfi = lcfi + 1
95029542 if (returnfp ):
95039543 return listarrayfiles ['fp' ]
@@ -9629,8 +9669,8 @@ def RarFileListFiles(infile, verbose=False, returnfp=False):
96299669 fgprint = fgname
96309670 if (len (fgprint ) <= 0 ):
96319671 fgprint = str (fgid )
9632- VerbosePrintOut (PrintPermissionString (fmode , ftype ) + " " + str (fuprint ) + "/" + str (fgprint ) + " " + str (
9633- member .file_size ).rjust (15 ) + " " + member .mtime .strftime ('%Y-%m-%d %H:%M' ) + " " + printfname )
9672+ VerbosePrintOut (PrintPermissionString (fmode , ftype ) + "\t " + str (fuprint ) + "/" + str (fgprint ) + "\t " + str (
9673+ member .file_size ).rjust (15 ) + "\t " + member .mtime .strftime ('%Y-%m-%d %H:%M' ) + "\t " + printfname )
96349674 lcfi = lcfi + 1
96359675 if (returnfp ):
96369676 return listarrayfiles ['fp' ]
@@ -9742,8 +9782,8 @@ def SevenZipFileListFiles(infile, verbose=False, returnfp=False):
97429782 fgprint = fgname
97439783 if (len (fgprint ) <= 0 ):
97449784 fgprint = str (fgid )
9745- VerbosePrintOut (PrintPermissionString (fmode , ftype ) + " " + str (fuprint ) + "/" + str (fgprint ) + " " + str (
9746- fsize ).rjust (15 ) + " " + member .creationtime .strftime ('%Y-%m-%d %H:%M' ) + " " + printfname )
9785+ VerbosePrintOut (PrintPermissionString (fmode , ftype ) + "\t " + str (fuprint ) + "/" + str (fgprint ) + "\t " + str (
9786+ fsize ).rjust (15 ) + "\t " + member .creationtime .strftime ('%Y-%m-%d %H:%M' ) + "\t " + printfname )
97479787 lcfi = lcfi + 1
97489788 if (returnfp ):
97499789 return listarrayfiles ['fp' ]
0 commit comments