从开始到结束,假设预期的输出是 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 |
+----------+--------+--------+--------+-----+