Я хочу, чтобы Python обработал все xml файлы в каталоге, но это только самый верхний - PullRequest
0 голосов
/ 17 марта 2020

У меня есть синтаксический анализатор xml, который изначально предназначался для использования с одним файлом, но был отредактирован для обработки всех файлов в заданном каталоге и подстановочного знака. Он запускается с сервера Linux. Команда может использоваться следующим образом:

-d, --directory каталог для чтения всех файлов по одному за раз; пример -d /output/*.xml

-f, --file xml для чтения; пример: -f вывод. xml

-o, --output Имя файла выходного файла для HTML отчета

Итак, в этом конкретном примере, пример того, что Я пытаюсь сделать было бы написано как

python parser.py -d / Directory / Directory -w вывод *. xml

Вот my main ()

def main():
     if (output != ''):
         if output.endswith('.html'):
             outFile = open(output, 'w')
         else:
             outFile = open(output + '.html', 'w')
     else:
         outFile = open('nmap-SMB-scan-output.html', 'w')

     if (inFile != ''):
         if not os.path.isfile(inFile):
             print('\nThere was an error opening file: %s (1)' % inFile)
             sys.exit()
         else:
             try:
                 outFile = header(outFile)
                 outFile = processFile(inFile, outFile)
                 outFile = footer(outFile)
             except:
                 print('\nThere was an error opening file: %s (2)' % inFile)

     elif (directory != ''):
         if (wildcard == ''):
             print('\nExiting, if using directory must use wildcard as well.')
             sys.exit()
         findFiles = directory + '/' + wildcard
         onlyfiles = glob.glob(findFiles)
         outFile = header(outFile)
         for f in onlyfiles:
             try:
                 outFile = processFile(f, outFile)
             except:
                 print('\nThere was an error opening file: %s (3)' % f)
         outFile = footer(outFile)

     else:  # if (inFile = '') and (directory = ''):
         print('\nYou must provide a file or directory to continue.')
         sys.exit()

Затем файл вставляется в фактический аспект обработки, форматируется и выполняет команду try:

try:
     opts, args = getopt.getopt(sys.argv[1:], "f:o:w:d:", ['file=', 'output=', 'wildcard=', 'directory='])
     inFile = output = directory = wildcard = ''
     proceed = False
     for opt, val in opts:
         if opt in ('-f', '--file'):
             if not os.path.isfile(val):
                 print('\nFile "%s" does not appear to exist, please verify file name.' % val)
                 sys.exit()
             else:
                 proceed = True
             inFile = val
         if opt in ('-o', '--output'):
             output = val
         if opt in ('-d', '--directory'):
             if not os.path.isdir(val):
                 print('\nDir "%s" does not appear to exist, please verify directory name.' % val)
                 sys.exit()
             else:
                 print("Directory selection:" + % val)
                 proceed = True
                 directory = val
         if opt in ('-w', '--wildcard'):
             wildcard = val

     if (__name__ == '__main__') and proceed == True:
         main()
     else:
         print('Need to provide a file or directory to process')
         usage()

 except getopt.error:
     usage()

Я не совсем уверен, почему это так не возвращаясь к main (), чтобы перейти к следующему файлу ... любые предложения, которые вы можете предоставить, будут оценены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...