在我的代码中,我有,
out.write(datGroup)
out.write(' '*20+": Space Group\n")
out.write(datLatx +" ")
out.write(datLaty +" ")
out.write(datLatz +" ")
out.write('/'),
out.write(' '*20+": a,b,c,alpha,beta,gamma\n")
将输出显示为:
189 : Space Group
10 11 12 / : a,b,c,alpha,beta,gamma
这对我所做的事情是正确的,但不是我想要的。
我想要":Spacegroup"和":a,b,c .."从同一列开始,无论其行的数据在何处结束,如:
189 : Space Group
10 11 12 / : a,b,c,alpha,beta,gamma
我可以在python3中执行此操作吗?
在jonrsharpe的例子之后编辑 所以我试过了:
def write_row(out, data, header, col=20):
out.write("{0}: {1}".format(" ".join(map(str, data)).ljust(col), header))
def print_data(self, BSub):
.....
with open("Init", mode='w') as out:
write_row(out, (datGroup,), "Space Group")
给出错误:
$ python3 geninit.py
Traceback (most recent call last):
File "geninit.py", line 109, in print_data
write_row(out, (datGroup,), "Space Group")
NameError: global name 'write_row' is not defined
答案 0 :(得分:2)
我会创建一个函数来执行此操作,例如:
def print_row(data, header, col=20):
print("{0}: {1}".format(" ".join(map(str, data)).ljust(col), header))
然后为每个案例调用它:
print_row((datGroup,), "Space Group")
print_row((datLatx, datLaty, datLatz), "a,b,c,alpha,beta,gamma")
这给出了例如
>>> datGroup = 189
>>> datLatx, datLaty, datLatz = 11, 12, 13
>>> print_row((datGroup,), "Space Group")
189 : Space Group
>>> print_row((datLatx, datLaty, datLatz, "/"), "a,b,c,alpha,beta,gamma")
11 12 13 / : a,b,c,alpha,beta,gamma
这使用:
map(str, ...)
将所有data
转换为字符串; " ".join(...)
在data
项目之间添加空格; str.ljust
用空格填充左侧“列”,保持宽度相同;和str.format
将填充的左列和标题放在": "
周围。然后,您可以对此进行调整以写入您的输出文件(您可以将其作为参数传递),而不是print
数据,例如:
def write_row(out, data, header, col=20):
out.write(...)
并致电
write_row(out, (datGroup,), "Space Group")