2016-11-14 6 views
0

Я ищу, чтобы взять файл CSV и отсортировать файл с помощью python 2.7, чтобы получить индивидуальное значение на основе двух столбцов для блока и партии. Мои данные выглядит сейчас в ссылке ниже:Создание отдельных строк в зависимости от значения ячейки в столбце

Beginning

Я хочу, чтобы иметь возможность на величину партии, чтобы создать дополнительные строки с помощью Python для автоматизации этого в новый CSV, где значения будут выглядеть следующим образом, когда нарисованной на новом CSV

End Result

Так что я знаю, что мне нужно прочитать строку и столбец, и на основе значения ячеек для столбца много, если существует «» то строка будет скопирована следующая строка в другом csv и все значения перед первым столбцом будут скопированы, и n второй, третий и т. д.

После того, как запятые отделены, тогда диапазоны будут управляться аналогичным образом в третьем CSV. Если есть одно значение, вся строка будет скопирована как есть.

Благодарим вас за помощь в продвижении.

ответ

0

Это должно сработать.

  1. В Windows открываются файлы в двоичном режиме или вы получаете двойные новые строки.
  2. Я предположил строки отделены друг от друга, потому что клетки ; содержит ,
  3. Первая разбивка по ,, а затем проверить для диапазонов
  4. print line для отладки
  5. Проверка ошибок остается в качестве упражнения для читателя.

Код:

import csv 

file_in = csv.reader(open('input.csv', 'rb'), delimiter=';') 
file_out = csv.writer(open('output.csv', 'wb'), delimiter=';') 

for i, line in enumerate(file_in): 
    if i == 0: 
     # write header 
     file_out.writerow(line) 
     print line 
     continue 

    for j in line[1].split(','): 
     if len(j.split('-')) > 1: 
      # lines with - 
      start = int(j.split('-')[0]) 
      end = int(j.split('-')[1]) 
      for k in xrange(start, end + 1): 
       line[1] = k 
       file_out.writerow(line) 
       print line 
     else: 
      # lines with , 
      line[1] = j 
      file_out.writerow(line) 
      print line