在fortran字符串格式化中,最后一个格式描述符将无限重复。并且相同的格式可用于写入和解析。
是否可以在python中复制此格式以进行写入/解析?
如果一个特定的例子有帮助,这个fortran格式的python等价是什么?
"(f5.2,10(f8.3))"
我希望这样的事情:
"{:5.2f}??".format(*args)
答案 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)