Индекс кортежа вне диапазона для печати значения индекса - PullRequest
0 голосов
/ 02 июля 2018

При выполнении следующего кода я получаю ошибку ниже, просто для информации matchObj здесь возвращает значение кортежа ..

$ ./ftpParser3_re_dup.py
Traceback (most recent call last):
  File "./ftpParser3_re_dup.py", line 13, in <module>
    print("{0:<30}{1:<20}{2:<50}{3:<15}".format("FTP ACCOUNT","Account Type","Term Flag"))
IndexError: tuple index out of range

Код ниже:

from __future__ import print_function
from signal import signal, SIGPIPE, SIG_DFL
signal(SIGPIPE,SIG_DFL)
import re
with open('all_adta', 'r') as f:
    for line in f:
        line = line.strip()
        data = f.read()
        # Making description & termflag optional in the regex pattern as it's missing in the "data_test" file with several occurrences.
        regex = (r"dn:(.*?)\nftpuser: (.*)\n(?:description:* (.*))?\n(?:termflag:* (.*))")
        matchObj = re.findall(regex, data)
        print("{0:<30}{1:<20}{2:<50}{3:<15}".format("FTP ACCOUNT","Account Type","Term Flag"))
        print("{0:<30}{1:<20}{2:<50}{3:<15}".format("-----------","------------","--------"))
        for index in matchObj:
            index_str = ' '.join(index)
            new_str = re.sub(r'[=,]', ' ', index_str)
            new_str = new_str.split()
            # In below print statement we are using "index[2]" as index is tuple here, this is because
            # findall() returns the matches as a list, However with groups, it returns it as a list of tuples.
            print("{0:<30}{1:<20}{2:<50}{3:<15}".format(new_str[1],new_str[8],index[2],index[3]))

1 Ответ

0 голосов
/ 02 июля 2018

В строке print("{0:<30}{1:<20}{2:<50}{3:<15}".format("FTP ACCOUNT","Account Type","Term Flag")) вы упомянули 4 индекса, но дали только 3, т.е. "FTP ACCOUNT","Account Type","Term Flag" Удалить 4-й индекс или добавить новый

...