tcc-latex/someUtils.py

128 lines
2.6 KiB
Python

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from os.path import isfile as isfile
from os.path import isdir as isdir
import sys
from os import popen as system
import os
import json
encodings = [
'utf-8', #common unicode
'iso-8859-1','cp1252', #latin-1
'shift_jis','shift_jisx0213', #japanese
'utf-16-le','utf-16-be' #last permissive unicode
]
def readAllFile(loc,permissive=False):
encTry=0
f=open(loc,'rb')
a=f.read()
while(isinstance(a,bytes)):
try:
a = a.decode(encodings[encTry])
except UnicodeError:
encTry+=1
except IndexError:
if not permissive:
raise IndexError('No encoding found to decode this file')
else:
a = a.decode('utf-8','ignore')
f.close()
return a
def saveFile(loc,cnt):
f=open(loc,'wt',encoding='utf-8')
f.write(cnt)
f.close()
def appendFile(loc,cnt):
f=open(loc,'at')
f.write(cnt)
f.close()
def readObject(loc):
a=json.loads(readAllFile(loc))
return a
def saveObject(loc,obj):
saveFile(loc,json.dumps(obj))
def listDirectory(where='.'):
return [f for f in os.listdir(where) if isfile(where+os.sep+f)]
def listSubdirectories(where='.'):
return [f for f in os.listdir(where) if isdir(where+os.sep+f)]
def fileListExists(lst):
return [f for f in lst if isfile(f)]
def readList(loc):
return [a for a in readAllFile(loc).strip('\n').strip(' ').strip('\n').split('\n')]
def saveList(loc,lst):
s = ''
for t in lst:
s+=(t+'\n')
saveFile(loc,s)
return s
def openObjectList(loc):
t = readAllFile(loc)
l=[]
for ln in t.split('\n'):
l.append(json.loads(ln))
return l
def saveObjectList(loc, lst:list):
t = '\n'.join([json.dumps(e) for e in lst])
saveFile(loc,t)
return t
def appendObjectList(loc,item):
if not isfile(loc):
return saveObjectList(loc,[item])
else:
return appendFile(loc,'\n'+json.dumps(item))
def delFile(loc):
if isfile(loc):
os.remove(loc)
def run(cmd):
return system('bash -c "'+cmd+'"').read()
def quietRun(cmd):
return system('bash -c "'+cmd+'" 2>/dev/null'
).read()
def runbkg(cmd):
return system('bash -c "'+cmd+'"')
def cp(f,p):
run('cp '+f+' '+p)
def mv(f,p):
run('mv '+f+' '+p)
def mkdir(a):
if not isdir(a):
run('mkdir '+'./%s/'%a)
def mkdirp(a):
if not isdir(a):
run('mkdir -p '+'%s'%a)
def rm(f):
if isfile(f):
run('rm '+f)
def rmf(f):
if isfile(f):
run('rm -f '+f)
def stdoutflush():
sys.stdout.flush()
return