# ------------------------------------------------------------------------------# import os,time; from PySide2.QtWidgets import QApplication,QMainWindow,QFileDialog; from PySide2.QtCore import QCoreApplication; # ------------------------------------------------------------------------------# from pyfiles import ui_compareDirs as uicompD; from pyfiles import compare_dirs_by_content as compdirs; # ------------------------------------------------------------------------------# class MainWindow(QMainWindow): def __init__(self): super(MainWindow,self).__init__(); self.ui=uicompD.Ui_MainWindow(); self.ui.setupUi(self); # ----------------------------------------------------------------------# self.ui.openDirName1Button.clicked.connect(self.setOpenDir1Name); self.ui.openDirName2Button.clicked.connect(self.setOpenDir2Name); self.ui.compareDirsButton.clicked.connect(self.doCompare); self.ui.helpButton.clicked.connect(self.doHelp); # end def __init__ # --------------------------------------------------------------------------# # --------------------------------------------------------------------------# def setOpenDir1Name(self): options=QFileDialog.DontResolveSymlinks \ | QFileDialog.ShowDirsOnly; DirName=QFileDialog.getExistingDirectory(self, "Open Directory", self.ui.DirName1LineEdit.text(),options); if DirName: self.ui.DirName1LineEdit.setText(DirName); # end def setOpenDir1Name def setOpenDir2Name(self): options=QFileDialog.DontResolveSymlinks \ | QFileDialog.ShowDirsOnly; DirName=QFileDialog.getExistingDirectory(self, "Open Directory", self.ui.DirName2LineEdit.text(),options); if DirName: self.ui.DirName2LineEdit.setText(DirName); # end def setOpenDir2Name def doHelp(self): TB=self.ui.showResultTextBrowser; doOutput(TB,'\n# Purpose:'); doOutput(TB,'# The script compares the text files of two directories,'); doOutput(TB,'# files with a given extension, ignoring differences'); doOutput(TB,'# in white space the following way: For byte by byte'); doOutput(TB,'# comparison sequences of white space characters are'); doOutput(TB,'# condensed to just one minimal empty space character.'); doOutput(TB,"# If the option 'No White Space' is set, all white space"); doOutput(TB,"# will be eliminated."); doOutput(TB,'#'); doOutput(TB,'# Note:'); doOutput(TB,"# The extension begins with a dot '.'. Directory names"); doOutput(TB,'# may be relative oe absolute. A Separator at the end'); doOutput(TB,'# of a name is optional. Names containing empty spaces'); doOutput(TB,'# must be enclosed by quotation marks.'); doOutput(TB,'#'); doOutput(TB,'# For different files'); doOutput(TB,"# The first different non white character is marked with"); doOutput(TB,"# a '^'. Its position in the files is named 'At' in the output."); doOutput(TB,"# 'L1-L2' is the difference of lengths of files. These numbers"); doOutput(TB,'# are numbers for internal files with all substrings'); doOutput(TB,'# "[ \\t\\n\\r\\f\\v]+" replaced by just '); doOutput(TB,'# one (or none) empty space character.'); doOutput(TB,''); # end doHelp() def doCompare(self): DirName1=self.ui.DirName1LineEdit.text(); DirName2=self.ui.DirName2LineEdit.text(); TB=self.ui.showResultTextBrowser; if (DirName1!="") and (DirName2!=""): if (DirName1!=DirName2): MatchCase=self.ui.matchCaseCheckBox.isChecked(); Extension=self.ui.fileExtensionComboBox.currentText(); NoSpaceAtAll=self.ui.noSpaceRadioButton.isChecked(); if not DirName1.endswith(os.sep): # DirName1 += os.sep # ### TO_BE_DONE ### DirName1+='/'; # end if if not DirName2.endswith(os.sep): # DirName2 += os.sep # ### TO_BE_DONE ### DirName2+='/'; # end if timeStamp=time.strftime("%d.%m.%Y, %H:%M:%S"); doOutput(TB,'# Comparing contents of files - apart from white space ...'); doOutput(TB,'# '+timeStamp+'\n'); doOutput(TB,'# File extension: '+Extension); doOutput(TB,'# Match case: '+str(MatchCase)); doOutput(TB,'# No space at all: '+str(MatchCase)); doOutput(TB,'\n# Directory 1: '+DirName1); doOutput(TB,'# Directory 2: '+DirName2); self.ui.compareDirsButton.setEnabled(False); self.ui.helpButton.setEnabled(False); self.ui.compareProgressBar.setEnabled(True); self.ui.compareProgressBar.setMaximum(0); QCoreApplication.processEvents(); try: Outputs=compdirs.compareDirs(DirName1, DirName2, Extension, MatchCase, NoSpaceAtAll); self.ui.compareProgressBar.setEnabled(False); self.ui.compareProgressBar.setMaximum(100); self.ui.compareDirsButton.setEnabled(True); self.ui.helpButton.setEnabled(True); for l in Outputs: doOutput(TB,l); doOutput(TB,'\n# Compared.'); except: self.ui.compareProgressBar.setEnabled(False); self.ui.compareProgressBar.setMaximum(100); self.ui.compareDirsButton.setEnabled(True); self.ui.helpButton.setEnabled(True); doOutput(TB,'\n\n! File ERROR - An exception occured.'); doOutput(TB,' - Note: The files must be text files.'); # end try else: doOutput(TB,'\n! Input ERROR - The names of the directories are identical!'); # end if # end if # end def doCompare() def doOutput(TextBrowser,Text): TextBrowser.append(Text); # end doOutput() # ------------------------------------------------------------------------------# # ------------------------------------------------------------------------------# if __name__=='__main__': import sys; app=QApplication(sys.argv); window=MainWindow(); window.show(); window.ui.DirName1LineEdit.setText(""); window.ui.DirName2LineEdit.setText(""); sys.exit(app.exec_()); # end if # ------------------------------------------------------------------------------# # ------------------------------------------------------------------------------#