是否有一个python等效的fortran可重复格式描述符?

时间:2018-04-20 18:04:21

标签: python fortran string-formatting

在fortran字符串格式化中,最后一个格式描述符将无限重复。并且相同的格式可用于写入和解析。

是否可以在python中复制此格式以进行写入/解析?

如果一个特定的例子有帮助,这个fortran格式的python等价是什么?

"(f5.2,10(f8.3))"

我希望这样的事情:

"{:5.2f}??".format(*args)

2 个答案:

答案 0 :(得分:2)

要解决此问题,您可以根据您拥有的值的数量生成模式。

由于您的'{:2d} {:5.2f}'模式需要两个值,我会将重复次数除以2:

pattern = ' '.join(['{:2d} {:5.2f}'] * (len(my_values) // 2))
result = pattern.format(*my_values)

答案 1 :(得分:0)

您可以定义自己的函数来处理重复的格式字符串:

def format_up_to(n, fmt, fmt_len, *args):
    args0, extra_args = args[:fmt_len], args[fmt_len:]
    if not args0: return ''
    if n <= 0: raise Exception('extra arguments: {}'.format(args))
    return fmt.format(*args0) + format_up_to(n-1, fmt, fmt_len, *extra_args)

参数是最大重复次数,格式字符串,格式字符串中的项目数,然后是将被格式化的任意数量的参数:

print(format_up_to(5, ' {:2d} {:5.2f}', 2, 1, 2))

给你:

  

1 2.00

print(format_up_to(5, ' {:2d} {:5.2f}', 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10))

给你:

  

1 2.00 3 4.00 5 6.00 7 8.00 9 10.00

print(format_up_to(5, ' {:2d} {:5.2f}', 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12))

给你:

  

异常:额外参数:(11,12)