Я подготовил небольшой скрипт, который использует re.finditer
, чтобы найти все целые числа (вы можете изменить регулярное выражение, чтобы оно могло иметь дело с числами с плавающей запятой или научной нотацией), а затем использовать map
, чтобы вернуть список масштабированных чисел.
import re
def scale(fact):
"""This function returns a lambda which will scale a number by a
factor 'fact'"""
return lambda val: fact * val
def find_and_scale(file, fact):
"""This function will find all the numbers (integers) in a file and
return a list of all such numbers scaled by a factor 'fact'"""
num = re.compile('(\d+)')
scaling = scale(fact)
f = open(file, 'r').read()
numbers = [int(m.group(1)) for m in num.finditer(f)]
return map(scaling, numbers)
if __name__ == "__main__":
import sys
if len(sys.argv) != 3:
print "usage: %s file factor" % sys.argv[0]
sys.exit(-1)
numbers = find_and_scale(sys.argv[1], int(sys.argv[2]))
for number in numbers:
print "%d " % number
Если у вас есть file
, чьи числа вы хотите масштабировать с коэффициентом fact
, вы вызовете скрипт из командной строки как python script.py file fact
, и он выведет на STDOUT
все масштабированные числа. Конечно, вы можете сделать что-то более полезное, если хотите ...