Начал было писать комментарии, но стало лениво. Так что дальше сами.
Файл ‘holyava.py’:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
def get_table(table):
# Раз колонкам всегда соответствует одна буква,
# то создадим по списку для каждой колонки.
col_a = []
col_b = []
col_c = []
col_d = []
# Пройдёмся циклом по _строкам_ файла 'table.csv'
for row in open(table, 'r'):
# Разделим строки на элементы.
row_list = row.split(';')
# Проигнорируем неправильные или пустые строки.
if len(row_list) >= 4:
# Положим каждое значение в соответствующий список.
col_c.append(float(row_list[0]))
col_a.append(float(row_list[1]))
col_d.append(float(row_list[2]))
col_b.append(float(row_list[3]))
# Объединяем значения колонок, в один кортеж.
# Их тоже, на всякий случай превращаем в кортеж.
data = (tuple(col_a), tuple(col_b), tuple(col_c), tuple(col_d))
return data
def get_input(infile):
data = []
# Пройдёмся циклом по _строкам_ файла 'input.csv'
for row in open(infile, 'r'):
# Разделим строки на элементы.
row_list = row.split(';')
# Кладём в список значение второго элемента строки,
# отрезая переводы строки.
row_list = row_list[1].strip()
data.append(row_list)
# Преобразовуем в кортеж.
data = tuple(data)
return data
def get_input_num(indata):
input_table = 'abcd'
new_data = []
for row in indata:
new_row = []
for item in input_table:
new_item = row.index(item)
new_row.append(new_item)
new_data.append(tuple(new_row))
new_data = tuple(new_data)
return new_data
def get_sum_list(table, input_num):
res_data = []
for pattern in input_num:
sum = 0
for col_num in xrange(len(table)):
row_num = pattern[col_num]
num = table[col_num][row_num]
sum += num
res_data.append(sum)
res_data = tuple(res_data)
return res_data
def main(infile, table):
# Получаем таблицу.
table = get_table(table)
# Получаем содержимое файла 'input.csv'.
indata = get_input(infile)
# Преобразовываем содержимое 'input.csv' в номера строк.
input_num = get_input_num(indata)
sum_list = get_sum_list(table, input_num)
return sum_list
if __name__ == '__main__':
infile = 'input.csv'
table = 'table.csv'
print main(infile, table)
01 ; abcd
02 ; abdc
03 ; acbd
04 ; acdb
05 ; adbc
06 ; adcb
07 ; bacd
08 ; badc
09 ; bcad
10 ; bcda
11 ; bdac
12 ; bdca
13 ; cabd
14 ; cadb
15 ; cbad
16 ; cbda
17 ; cdab
18 ; cdba
19 ; dabc
20 ; dacb
21 ; dbac
22 ; dbca
23 ; dcab
24 ; dcba
5; 11; 3; 15
7; 8; 78; 4
9; 10; 6; 0
10; 0; 1; 8