当前位置: 首页 > 知识库问答 >
问题:

如何枚举文件的特定列

邵耀
2023-03-14

我试图枚举输入文件的第二列,但代码给出了以下错误。如何修复代码以获得以下输出文件?

错误:

回溯(最近一次调用最后一次):文件“/rename_atoms.py”,第7行,打印(项目索引)类型错误:无法连接“str”和“int”对象

我的代码:

#!/usr/bin/python

with open ('input.gro', 'r') as f:
    for line in f:
        column=line.split()
        for index, item in enumerate(column[1]):
            print(item+index)

输入文件:

GRoups of Organic Molecules in ACtion for Science
   18
    1LIG      O    1   1.665   1.740   8.646
    1LIG      O    2   0.877   2.044   7.947
    1LIG      S    3   1.469   1.778   8.501
    1LIG      S    4   1.340   1.695   8.487
    1LIG      S    5   1.231   1.770   8.412
    1LIG      N    6   1.282   1.801   8.268
    1LIG      C    7   1.553   1.679   8.585
    1LIG      C    8   1.523   1.805   8.360
    1LIG      C    9   1.313   1.647   8.630
    1LIG      H   10   1.418   1.875   8.271
    1LIG      H   11   1.454   1.624   8.688
    1LIG      H   12   1.100   1.691   8.403
    1LIG      H   13   1.453   1.912   8.577
    1LIG      H   14   1.174   1.869   8.184
    1LIG      H   15   0.992   1.777   8.339
    1LIG      H   16   1.037   1.853   8.217
    1LIG      H   17   1.206   1.941   8.068
    1LIG      H   18   0.939   1.914   8.137
      0.00000   0.00000   0.00000

所需输出文件:

GRoups of Organic Molecules in ACtion for Science
   18
    1LIG      O1    1   1.665   1.740   8.646
    1LIG      O2    2   0.877   2.044   7.947
    1LIG      S1    3   1.469   1.778   8.501
    1LIG      S2    4   1.340   1.695   8.487
    1LIG      S3    5   1.231   1.770   8.412
    1LIG      N1    6   1.282   1.801   8.268
    1LIG      C1    7   1.553   1.679   8.585
    1LIG      C2    8   1.523   1.805   8.360
    1LIG      C3    9   1.313   1.647   8.630
    1LIG      H1   10   1.418   1.875   8.271
    1LIG      H2   11   1.454   1.624   8.688
    1LIG      H3   12   1.100   1.691   8.403
    1LIG      H4   13   1.453   1.912   8.577
    1LIG      H5   14   1.174   1.869   8.184
    1LIG      H6   15   0.992   1.777   8.339
    1LIG      H7   16   1.037   1.853   8.217
    1LIG      H8   17   1.206   1.941   8.068
    1LIG      H9   18   0.939   1.914   8.137
      0.00000   0.00000   0.00000

共有2个答案

端木高邈
2023-03-14

不能连接 int 和字符串。它们是函数的不兼容类型。您需要将索引从 int 转换为字符串,然后连接它们。在第 7 行中,尝试:

        print(item+str(index))
沃威
2023-03-14

问题出在这一行:

  for index, item in enumerate(column[1]):
>>      print(item+index)

您正在尝试添加一个整数(索引)和一个字符串(item)。如果您只想将它们打印在一起,只需执行以下操作:

print(item, index)

请注意,默认情况下,这将在参数之间添加一个空格。要删除它,请使用< code>sep参数,并将其设置为空字符串。

然而,这可能不是您想要的,因为输出可能是这样的:

O 0
O 0
S 0

...等等。

因此,请执行以下操作:

for i, l in enumerate(f):
    column = l.split()
    print(column[1],i,sep='')

这将是这样的:

O0
O1
S2

...等等。

快到了。为了获得期望的输出,我们需要维护每个元素的计数。所以,试着这样做:

from collections import defaultdict

counts = defaultdict(int)
for l in f:
    column = l.split()
    counts[column[1]] += 1
    print(column[1], counts[column[1]], sep="")

这应该打印:

O1
O2
S1

...等等。

 类似资料:
  • 问题内容: 例如,我该怎么做: 结果示例: 问题答案: 迅捷4.2+ 从Swift 4.2(使用Xcode 10)开始,只需添加协议一致性即可从中受益。要添加此协议一致性,您只需要在某处写: 如果枚举是您自己的,则可以直接在声明中指定一致性: 然后,以下代码将打印所有可能的值: 与早期Swift版本(3.x和4.x)的兼容性 如果您需要支持Swift 3.x或4.0,则可以通过添加以下代码来模仿S

  • 我目前正在开发一个解析器。我走在一棵树上,大部分是决定论的(我能找到的数值有限)。 通常在这些情况下,我会创建一个枚举,其中包含我希望找到的值的名称,如下所示: 在这种情况下,我可以通过以下方式检查字符串是否属于枚举: 问题是目前我和特殊角色一起工作({" 我想要的是将枚举与那些特殊的字符元素相关联,例如 并继续使用以下简单明了的方法: 目前,我在任何地方都使用枚举,但对于这些元素,我使用表。我想

  • 例如,我如何做类似的事情: 结果示例:

  • 问题内容: 我想知道在Java中是否可以嵌套枚举。 在这里,我想做的是: 拥有一个由CAT和DOG组成的物种,将允许我访问可用CAT和DOG品种的子枚举。例如,我希望能够测试是否装有CAT或DOG,以及动物是否是PERSAN CAT或PITBULL狗。CAT和DOG品种必须是不同的枚举,即CatBreeds枚举和DogBreeds枚举。 这是我要使用的访问模式的示例: 种类: 物种 种狗 品种:

  • 问题内容: 这不是卡住我的问题,而是我正在寻找一种编写代码的整洁方法。 本质上,我正在编写一个事件驱动的应用程序。用户触发一个事件,该事件被发送到适当的对象,然后这些对象处理事件。现在,我正在编写偶数处理程序方法,并且希望使用switch语句确定如何处理事件。现在,在我研究通用结构时,事件类非常简单: 然后,在另一堂课中,我会看到类似以下内容的内容: 我会 喜欢 做的就是这样的事情(尽管我当然会坚

  • 是否可以使用枚举来定义键?(映射返回int String、Object。但这不是问题的一部分) 谢谢你的帮助。