Skip to content

Commit 1514535

Browse files
committed
Small update
1 parent c3a275b commit 1514535

1 file changed

Lines changed: 53 additions & 13 deletions

File tree

pycatfile/pycatfile.py

Lines changed: 53 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
91239154
def 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

Comments
 (0)