在Python中将类似Fortran的格式写入文件

时间:2016-03-13 23:04:20

标签: python fortran

在Fortran中,我可以使用:

open(10, file = 'output')
write(10, '(5A10)') 'apple', 'banana', 'orange', 'grape', 'berry'

在Python中编写输出有类似的方法吗?

我知道我可以使用:

f.write('%5s\t%5s\t%5s\t%5s\t%5s' % ('apple', 'banana', 'orange', 'grape', 'berry'))

但是我怎样才能让它更紧凑?使用'(5A10)'的类似方式,而不是冗长的'%5s\t%5s\t%5s\t%5s\t%5s'

2 个答案:

答案 0 :(得分:3)

不,这里没有真正的捷径。在这种情况下,您可以尝试:

file_handle.write('\t'.join('%s' % f for f in fruits))

我不确定这会变得更加紧凑,直到水果变得更长一点,但我认为它确实使输出更加明显......

另外,如果我正确地阅读了您的格式声明(自从我花了很多时间使用Fortran以来已经过去2年了),您将格式化5个字符串,每个字符宽10个字符。对于10个字符宽的字符串,相应的python格式代码是'%10.10s'(最少10个字符,最大宽度为10个字符)。在这种情况下,标签是不必要的,您可以将其写为:

>>> fruits = ('apple', 'banana', 'orange', 'grape', 'berry')
>>> (5*'%10.10s') % fruits
'     apple    banana    orange     grape     berry'

哪个 比fortran方式更加冗长。

答案 1 :(得分:3)

您可以使用fortranformat: https://pypi.python.org/pypi/fortranformat

效果很好!

>>> import fortranformat as ff
>>> header_line = ff.FortranRecordWriter('(A15, A15, A15)')
>>> header_line.write(['x', 'y', 'z'])
  '              x              y              z'
>>> line = FortranRecordWriter('(3F15.3)')
>>> line.write([1.0, 0.0, 0.5])
  '          1.000          0.000          0.500'
>>> line.write([1.1, 0.1, 0.6])
  '          1.100          0.100          0.600'