Witam, mam dylemat czy powinienem użyć programowania objektowego w moim pythonowym skrypcie. Podeśle kod funkcji main i byłbym wdzięczny za opinie czy w tym wypadku użyć takiego rozwiązania. Chciałbym się dowiedzieć czy było by to bardziej wydajne czy też bardziej czytelne rozwiązanie.
W kodzie jest dużo czytania jakichś konfiguracji z plików, których później będe używać w różnych etapach skryptu. Dlatego powstał mój dylemat czy jest to dobrze napisane, że tworze zmienne lokalne i wysyłam je jako argumenty w funkcjach. Dziękuje za wszelką pomoc!
def main():
start_script_time = time.time()
output_pipeClient.connect()
config = ConfigParser()
# w tym miejscu pobieram dane konfiguracyjne z pliku .ini, które następnie przesyłam jako argumenty do
# innych funkcji. Myślałem nad utworzeniem klasy i konstruktora, który by właśnie czytał ten plik i
# przypisywał te dane do zmiennych. To samo w dalszej częsci kodu - jakakolwiek zmienna była by
# inicjalizowana w konstruktorze.
# Zamiast objektowości myślałem też czy te zmienne nie powinny być zmiennymi globalnymi. Nie musiałbym
# wtedy wielokrotnie przesyłać ich do innych funkcji
try:
config.read('config.ini')
file_path = '{}'.format(config.get('ScriptConfig', 'file-path'))
keywords_path = '{}'.format(config.get('ScriptConfig', 'key-words-path'))
if ('{}'.format(config.get('ScriptConfig', 'key-words')) == 'True'):
use_keywords = True
else:
use_keywords = False
lang = '{}'.format(config.get('TesseractConfig', 'tesseract-lang'))
tessdata_path = '{}'.format(config.get('TesseractConfig', 'tesseract-tessdata-path'))
tesseract_exe_path = '{}'.format(config.get('TesseractConfig', 'tesseract-executable-path'))
poppler_bin_path = '{}'.format(config.get('PopplerConfig', 'poppler-bin-path'))
except:
writeError("Error occured while reading config.ini.")
if tessdata_path != 'null':
tessdata_dir_config = '--tessdata-dir "{}"'.format(tessdata_path)
else:
tessdata_dir_config = ''
if tesseract_exe_path != 'null':
pytesseract.pytesseract.tesseract_cmd = tesseract_exe_path
if (pytesseract.get_languages(tessdata_dir_config).count(lang) == 0):
writeError("The specified language was not installed.")
keywords = list
# w tym miejscu zaczynam korzystać z moich funkcji. Nie ma ich zbyt wiele, ale myślałem np. czy funkcji
# generateWordsFromImg nie podzielić na pare osobnych części, żeby była lepsza czytelność.
if use_keywords == True:
keywords = loadKeywordsFromTxt(keywords_path)
correct_files = loadFilesAndCheckFileFormat(file_path)
words = generateWordsFromImg(correct_files, keywords, use_keywords, lang, tessdata_dir_config, poppler_bin_path)
saveResultsToFile(words)
end_script_time = time.time()
script_time_seconds = end_script_time - start_script_time
script_time_minutes = 0
while(script_time_seconds >= 60):
script_time_seconds -= 60
script_time_minutes += 1
final_time = "{}".format(script_time_minutes) + " min, " + "{:.2f}".format(script_time_seconds) + " sec."
output_pipeClient.write("COMPLETE, check results.txt file " + "| Time: " + (str)(final_time))
sys.exit()