2016-04-13 3 views
0

У меня есть 3 файлов (file1.txt, file2.txt, file3.txt), которые выглядят как:выравнивают массивы с питоном

file1:

-7 12 
-6 13 
-5 11 
-4 10 
-3 4 
-2 8 
-1 7 
0 9 
1 10 

file2:

-5 13 
-4 4 
-3 5 
-2 4 
-1 7 
0 6 
1 9 
2 10 
3 2 

file3:

-2 3 
-1 14 
0 8 
1 7 
2 3 
3 9 
4 10 
5 8 
6 3 

Я хочу, чтобы выровнять нули массивов, которые я прочитал из этих файлов и получить сумму значений справа, то есть получить что-то вроде:

-7 -> 12 + 0 + 0 = 12 
-6 -> 13 + 0 + 0 = 13 
-5 -> 11 + 13 + 0 = 24 
-4 -> 10 + 4 + 0 = 14 
-3 -> 4 + 5 + 0 = 9 
-2 -> 8 + 4 + 3 = 15 
-1 -> 7 + 7 + 14 = 28 
0 -> 9 + 6 + 8 = 23 
1 -> 10 + 9 + 7 = 26 
2 -> 0 + 10 + 3 = 13 
3 -> 0 + 2 + 9 = 11 
4 -> 0 + 0 + 10 = 10 
5 -> 0 + 0 + 8 = 8 
6 -> 0 + 0 + 3 = 3 
7 -> 0 + 0 + 0 = 0 

Как я мог сделать это, с Python? Заранее спасибо.

+0

Вы пробовали что-нибудь? – gidim

+0

Мне немного стыдно, но у меня нет идей ... – urgeo

+0

Знаете ли вы, как читать значения из файла или вы застряли на этом? –

ответ

0

От начала и до конца, предполагая, что выходной сигнал - csv, а входные файлы - csv, разделенные символом «,». Методы вывода очень гибкие, но если что-то еще ожидалось.

import petl 

file1 = petl.fromcsv('file1.csv') 
file1 = petl.pushheader(file1, ['position', 'value1']) 
file2 = petl.fromcsv('file2.csv') 
file2 = petl.pushheader(file2, ['position', 'value2']) 
file3 = petl.fromcsv('file3.csv') 
file3 = petl.pushheader(file3, ['position', 'value3']) 


file1_joined_file2 = petl.outerjoin(file1, file2, key='position') 
all_joined = petl.outerjoin(file1_joined_file2, file3, key='position') 
all_joined = petl.convert(all_joined, 'value1', {None: 0}) 
all_joined = petl.convert(all_joined, 'value2', {None: 0}) 
all_joined = petl.convert(all_joined, 'value3', {None: 0}) 
all_joined = petl.convert(all_joined, ('position', 'value1', 'value2', 'value3'), int) 
all_joined = petl.addfield(all_joined, 'sum', lambda rec: rec['value1'] + rec['value2'] + rec['value3']) 
all_joined = petl.sort(all_joined, 'position') 

print petl.lookall(all_joined) 
petl.tocsv(all_joined, 'done.csv') 

Выход из вышеприведенного печати:

+----------+--------+--------+--------+-----+ 
| position | value1 | value2 | value3 | sum | 
+==========+========+========+========+=====+ 
|  -7 |  12 |  0 |  0 | 12 | 
+----------+--------+--------+--------+-----+ 
|  -6 |  13 |  0 |  0 | 13 | 
+----------+--------+--------+--------+-----+ 
|  -5 |  11 |  13 |  0 | 24 | 
+----------+--------+--------+--------+-----+ 
|  -4 |  10 |  4 |  0 | 14 | 
+----------+--------+--------+--------+-----+ 
|  -3 |  4 |  5 |  0 | 9 | 
+----------+--------+--------+--------+-----+ 
|  -2 |  8 |  4 |  3 | 15 | 
+----------+--------+--------+--------+-----+ 
|  -1 |  7 |  7 |  14 | 28 | 
+----------+--------+--------+--------+-----+ 
|  0 |  9 |  6 |  8 | 23 | 
+----------+--------+--------+--------+-----+ 
|  1 |  10 |  9 |  7 | 26 | 
+----------+--------+--------+--------+-----+ 
|  2 |  0 |  10 |  3 | 13 | 
+----------+--------+--------+--------+-----+ 
|  3 |  0 |  2 |  9 | 11 | 
+----------+--------+--------+--------+-----+ 
|  4 |  0 |  0 |  10 | 10 | 
+----------+--------+--------+--------+-----+ 
|  5 |  0 |  0 |  8 | 8 | 
+----------+--------+--------+--------+-----+ 
|  6 |  0 |  0 |  3 | 3 | 
+----------+--------+--------+--------+-----+ 
1

только идея, но там будет много их:

  1. импортировать все эти пары в один список пар
  2. создать второй пустой список пар
  3. разобрать каждую пару первого списка и проверить, является ли первый el ement пары находится где-то среди первых элементов пар второго списка. Если он уже тогда суммирует второй элемент пар, иначе просто добавьте пару ко второму списку.
Смежные вопросы