在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'
。
答案 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'