从特定列写入

2024-10-04 03:28:38 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的代码里

 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

Tags: alphadatadefgroupcolspaceoutbeta
1条回答
网友
1楼 · 发布于 2024-10-04 03:28:38

我将创建一个函数来执行此操作,例如:

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")

相关问题 更多 >