for loop, split string, сохранение частей строки в новый список, IndexError: индекс списка вне диапазона - работает для одной части строки, а не для другой - PullRequest
1 голос
/ 19 июня 2019

Впервые на питоне. У меня есть список имен файлов, которые я разделил в цикле for. Я хочу взять несколько таких столбцов и поместить их в новый список. Это работает для x [0], но не для x [6]. Когда я печатаю x [0] и x [6], они оба являются строками и оба имеют значение.

p_type=[]; p_start_time=[]; p_end_time=[];

for i in precise_links: #precise_links is list of filenames
    x = i.split('_')
    print(x)
    p_type_x = x[0]; p_type.append(p_type_x)
    p_start_time_x = x[6]; p_start_time.append(p_start_time_x)

#To show you x
print(x)

#To show you what each x part is/type
print(x[0]) 
type(x[0])
print(x[6])
type(x[6])

print(p_type)

выход

['S1A', 'OPER', 'AUX', 'POEORB', 'OPOD', '20180829T120853', 'V20180808T225942', '20180810T005942.EOF']
['S1A', 'OPER', 'AUX', 'POEORB', 'OPOD', '20171021T121400', 'V20170930T225942', '20171002T005942.EOF']
['S1A', 'OPER', 'AUX', 'POEORB', 'OPOD', '20150525T122539', 'V20150503T225944', '20150505T005944.EOF']
['S1A', 'OPER', 'AUX', 'POEORB', 'OPOD', '20180703T120727', 'V20180612T225942', '20180614T005942.EOF']
['S1B', 'OPER', 'AUX', 'POEORB', 'OPOD', '20171015T111433', 'V20170924T225942', '20170926T005942.EOF']
['S1A', 'OPER', 'AUX', 'POEORB', 'OPOD', '20150605T122809', 'V20150514T225944', '20150516T005944.EOF']
....

['S1B', 'OPER', 'AUX', 'POEORB', 'OPOD', '20160620T141641', 'V20160528T225943', '20160530T005943.EOF']

S1B

str

V20160528T225943

str

['S1A', 'S1A', 'S1A', 'S1A', 'S1B', 'S1A', 'S1B', 'S1B', 'S1A'...]

Ошибка, возникающая при запуске цикла.

---------------------------------------------------------------------------
IndexError - Traceback (most recent call last)

<ipython-input-131-2cbe5599886f> in <module>= 13     
p_start_time_x = x[6]; #p_start_time.append(p_start_time_x)

IndexError: list index out of range

Ответы [ 2 ]

1 голос
/ 19 июня 2019

Ваша проблема в том, что в некоторых именах файлов недостаточно разделенных подчеркиванием.Предполагая, что если они действительно этого не делают, элемент start_time не релевантен, вы можете сделать:

p_type=[]
p_start_time=[]

for i in precise_links: #precise_links is list of filenames
    x = i.split('_')
    try:
        p_type.append(x[0])
        p_start_time.append(x[6])
    except IndexError:
        print("Bad file encountered - {}".format(i)
        continue
0 голосов
/ 19 июня 2019

Что я в итоге сделал .. Все имена файлов должны быть в правильном порядке, и я хотел, чтобы мои списки были одинаковой длины (для работы позже), поэтому я просто выкинул все имена, которые не соответствовали критериям(длина 8)

p_type=[]; p_start_time=[]; p_end_time=[];

for i in precise_links:
    x = i.split('_')
    if len(x) == 8:
        p_type.append(x[0])
        p_start_time.append(x[6])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...