This is a Python script for counting the lines of a compressed file:
#!/usr/bin/env python3
import gzip, bz2, zipfile, os, sys
def openZip(zfile):
f = zipfile.ZipFile(zfile)
firstFile = f.filelist[0].filename
if firstFile.endswith("/"):
raise Exception("This zip file contains a directory.")
return f.open(firstFile)
class compressedFile:
fileOpenerDict = {".gz":gzip.open, ".bz2":bz2.open, ".zip":openZip}
def __init__(self, pFilePath):
self.filePath = os.path.abspath(pFilePath)
self.fileStem, self.ext = os.path.splitext(self.filePath)
self.ext = self.ext.lower()
try:
self.fileOpener = self.fileOpenerDict[self.ext]
except KeyError:
print("Only gz, zip, and bz2 files allowed.")
exit(1)
def countLines(self):
nLines = 0
with self.fileOpener(self.filePath) as fh:
for line in fh:
nLines = nLines + 1
return nLines
if __name__ == "__main__":
c = compressedFile(sys.argv[1])
n = c.countLines()
print("N lines: %d" % n)