Суммирование по колонкам в файле Python

summirovanie po kolonkam v fajle python Текст и язык

Рассмотрим несколько практических применений операций разбиения и объединения строк. Во многих областях довольно часто возникает необходимость просмотра файлов по колонкам. Допустим, например, что имеется вывод какой-то системы в файл в виде колонок чисел и требуется сложить числа в каждой колонке. В Python эту задачу можно решить с помощью операции разбиения строк, как показано в примере 19.1. Python предоставляет также дополнительный бонус, позволяя сделать это решение инструментом многократного пользования, оформив его в виде доступной для импортирования функции.

Пример 19.1. PP4E\Lang\summer.py

#!/usr/local/bin/python

подпись: def summer(numcols, filename):
sums = [0] * numcols
for line in open(filename):
cols = line.split()
for i in range(numcols):
sums[i] += eval(cols[i]) return sums
подпись: # создать список, заполненный нулями
# просмотр строк в файле
# разбить на колонки
# по пробелам/табуляциям
# суммировать значения в sums


if __name__ == ‘__main__’: import sys print(summer(eval(sys.argv[1]), sys.argv[2])) # ‘% summer.py cols file’

Обратите внимание, что здесь для чтения строк мы использовали итератор файла вместо явного вызова метода readlines (в главе 4 говорилось, что итераторы файлов позволяют избежать необходимости загружать файл в память целиком). Сам файл является временным объектом, который будет автоматически закрыт сборщиком мусора.

Как обычно для корректно оформленных сценариев этот модуль можно им пор тиро вать и вызывать его функцию, а можно за пус кать его как инструмент командной строки. Сценарий summer.py вызывает метод split, чтобы создать список строк, представляющих ряды колонок, и eval — для преобразования строк в колонках в числа. Ниже приводится пример входного файла, в котором для разделения колонок используются пробелы и табуляции, и результат применения сценария к этому файлу:

C:\\PP4E\Lang> type table1.txt

1 5 10 2 1.0

2 10 20 4 2.0

3 15 30 8 3

4 20 40 16 4.0

C:\\PP4E\Lang> python summer.py 5 table1.txt [10, 50, 100, 30, 10.0]

Обратите также внимание, что так как сценарий суммирования использует функцию eval для преобразования текста из файла в числа, то в файле можно было бы хранить произвольные выражения на языке Python:

C:\\PP4E\Lang> type table2.txt

2 1+1 1<<1 eval("2")

16 2*2*2*2 pow(2,4) 16.0

3 len(‘abc’) [1,2,3][2] {‘spam’:3}[‘spam’]

C:\\PP4E\Lang> python summer.py 4 table2.txt [21, 21, 21, 21.0]

Использованная литература:

Марк Лутц — Программирование на Python, 4-е издание, II том, 2011

Каталог сайтов Всего.ру
Оцените статью
Секреты программирования
Добавить комментарий