Как вставить данные в определенных местах в списке Python для конкретной проблемы? - PullRequest
0 голосов
/ 18 июня 2019

У меня есть список Python (как показано ниже), который содержит два типа строк: один похож на '1556294808 2019-04-26 21:36:48 +0530', а другой похож на '3 файла изменены, 126 вставки (+), 18 удалений (-) ', но они не строго в альтернативных позициях.

Я хочу, чтобы эти два типа строк находились в альтернативных позициях, вставляя '0 измененных файлов, 0 вставок (+), 0 удалений (-)' между двумя строками типа один, если они находятся в последовательных местах , Порядок элемента не должен быть изменен.

['1556294808 2019-04-26 21:36:48 +0530', ' 1 file changed, 1 deletion(-)', '1545318890 2018-12-20 20:44:50 +0530', '1545318858 2018-12-20 20:44:18 +0530', ' 3 files changed, 126 insertions(+), 18 deletions(-)', '1545208408 2018-12-19 14:03:28 +0530', '1545208369 2018-12-19 14:02:49 +0530', ' 2 files changed, 352 insertions(+), 12 deletions(-)', '1545134701 2018-12-18 17:35:01 +0530', ' 3 files changed, 134 insertions(+), 1 deletion(-)', '1545116120 2018-12-18 12:25:20 +0530', '1545115969 2018-12-18 12:22:49 +0530', ' 2 files changed, 25 insertions(+), 17 deletions(-)', '1545114797 2018-12-18 12:03:17 +0530', '1545114768 2018-12-18 12:02:48 +0530', ' 2 files changed, 107 insertions(+), 17 deletions(-)', '1545107389 2018-12-18 09:59:49 +0530', ' 3 files changed, 55 insertions(+), 16 deletions(-)', '1545051306 2018-12-17 18:25:06 +0530', '1545051282 2018-12-17 18:24:42 +0530', ' 3 files changed, 121 insertions(+), 1 deletion(-)', '1545031219 2018-12-17 12:50:19 +0530', '1545031091 2018-12-17 12:48:11 +0530', ' 3 files changed, 327 insertions(+), 6 deletions(-)', '1545027187 2018-12-17 11:43:07 +0530', '1545027168 2018-12-17 11:42:48 +0530', ' 2 files changed, 79 insertions(+), 11 deletions(-)', '1545022804 2018-12-17 10:30:04 +0530', ' 3 files changed, 47 insertions(+), 8 deletions(-)']

Ответы [ 2 ]

0 голосов
/ 18 июня 2019

Если я правильно понял вопрос, приведенный ниже код должен сработать, он в основном перебирает список и, если обнаруживаются две непрерывные строки 'date', он вставляет строку между ними. Цикл идет в обратном направлении, чтобы избежать проблем со ссылками на вставку новых элементов.

import datetime as dt

items = ['1556294808 2019-04-26 21:36:48 +0530', ' 1 file changed, 1 deletion(-)', '1545318890 2018-12-20 20:44:50 +0530', '1545318858 2018-12-20 20:44:18 +0530', ' 3 files changed, 126 insertions(+), 18 deletions(-)', '1545208408 2018-12-19 14:03:28 +0530', '1545208369 2018-12-19 14:02:49 +0530', ' 2 files changed, 352 insertions(+), 12 deletions(-)', '1545134701 2018-12-18 17:35:01 +0530', ' 3 files changed, 134 insertions(+), 1 deletion(-)', '1545116120 2018-12-18 12:25:20 +0530', '1545115969 2018-12-18 12:22:49 +0530', ' 2 files changed, 25 insertions(+), 17 deletions(-)', '1545114797 2018-12-18 12:03:17 +0530', '1545114768 2018-12-18 12:02:48 +0530', ' 2 files changed, 107 insertions(+), 17 deletions(-)', '1545107389 2018-12-18 09:59:49 +0530', ' 3 files changed, 55 insertions(+), 16 deletions(-)', '1545051306 2018-12-17 18:25:06 +0530', '1545051282 2018-12-17 18:24:42 +0530', ' 3 files changed, 121 insertions(+), 1 deletion(-)', '1545031219 2018-12-17 12:50:19 +0530', '1545031091 2018-12-17 12:48:11 +0530', ' 3 files changed, 327 insertions(+), 6 deletions(-)', '1545027187 2018-12-17 11:43:07 +0530', '1545027168 2018-12-17 11:42:48 +0530', ' 2 files changed, 79 insertions(+), 11 deletions(-)', '1545022804 2018-12-17 10:30:04 +0530', ' 3 files changed, 47 insertions(+), 8 deletions(-)']
new_item = ' 0 files changed, 0 insertions(+), 0 deletions(-)'

fmt = ['%Y %m %d','%H %M %S','%z']
def check_for_date(item, fmt):
    try:
        date = item.split()
        for i in range(3):
            dt.datetime.strptime(date[i+1].replace('-',' ').replace(':',' '), fmt[i])
        return True
    except ValueError as err:
        return False

for ii in range(len(items)-1,0,-1):
    if (check_for_date(items[ii], fmt)) and (check_for_date(items[ii-1], fmt)):
        items.insert(ii, new_item)
0 голосов
/ 18 июня 2019

Это должно решить работу за вас.Ниже я делаю цикл по всему списку, чтобы проверить, если +0530, потому что он выглядит как его в каждой отметке времени.если вы хотите, вы можете написать функцию, чтобы проверить, является ли ее отметка времени, которая будет более действительной.

data = []
for i in range(len(y)):
  if "+0530" in y[i]:
    data.append(y[i])
    if "+0530" in y[i+1]:
      data.append("0 files changed, 0 insertions(+)")
  else:
    data.append(y[i])

Вывод data:

1556294808 2019-04-26 21:36:48 +0530
 1 file changed, 1 deletion(-)
1545318890 2018-12-20 20:44:50 +0530
0 files changed, 0 insertions(+)
1545318858 2018-12-20 20:44:18 +0530
 3 files changed, 126 insertions(+), 18 deletions(-)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...