【问题标题】:How to get the length of the column #3? Python如何获得第 3 列的长度? Python
【发布时间】:2021-04-20 03:09:37
【问题描述】:

我对此非常陌生,老实说,我不太了解。有人可以帮我创建一个代码来获得第 3 列的总和,对不起,如果这太愚蠢了,希望你能帮助我。谢谢

这是一个标签文件。

#打开文件(必须是.tab文件)

file = open("chromosome_length.tab")

#根据READ ME文件,17号染色​​体是线粒体染色体。

##打印第 17 行

lines_to_print = [16]

for index, line in enumerate(file):
  if ( index in lines_to_print):
    print("Mitochondrial chromosome:")
    print(line)

#染色体有多长?

with open("chromosome_length.tab") as f:
    lines = f.read().split('\n')

values = [int(i.split()[2]) for i in lines]
print(sum(values))

#错误:

Traceback (most recent call last):
  File "/Users/vc/Downloads/assig.py", line 19, in <module>
    values = [int(i.split()[2]) for i in lines]
  File "/Users/vc/Downloads/assig.py", line 19, in <listcomp>
    values = [int(i.split()[2]) for i in lines]
IndexError: list index out of range

Process finished with exit code 1

文件:

3   NC_001135   316620
4   NC_001136   1531933
5   NC_001137   576874

【问题讨论】:

  • 欢迎来到 SO!避免在图像中发布您的代码、输出或错误,而是以文本格式发布!

标签: python indexing content-length


【解决方案1】:

你可以这样做:

with open('chromosome_length.tab') as f:
    lines = f.read().split('\n')

values = [int(i.split()[2]) for i in lines if i]
print(sum(values))

说明:

以阅读模式打开文件chromosome_length.tab,读取所有文本,将文本换行(\n
此时,我们的lines 列表中有这样的内容:

[
    "1 NC1234 1234",
    "2 NC4321 5678",
    ...
]

为了得到每一行的第3列,我们遍历lines中的每一行,用空格分割行,所以我们有["1", "NC1234", "1234"],通过[2]得到第3列并将其转换为@ 987654329@.

所以,我们在values 列表中拥有所有值:[1234, 5678, ...]

最后,我们使用内置函数sum()values列表中的值求和并打印出来


UPD: 问题出在列表末尾的空字符串'' 中。为我们的inline for 循环添加过滤器if i 解决了这个问题。


希望对你有所帮助:)

【讨论】:

  • 感谢您抽出宝贵时间帮助我。很抱歉,我没有以正确的格式发布它。我按照你的建议做了,但我得到了一个错误。我编辑了我的问题。
  • 似乎它们是用制表符而不是空格分隔的,试试int(i.split("\t")[2]。如果它不起作用,请尝试将您的标签文件上传到任何共享服务并在此处共享链接。
  • 好的,这是一个空字符串问题,文件末尾有一个新的空行。我已经更新了答案。如果它解决了您的问题,请不要忘记投票并将答案标记为“已接受的答案”)
  • 太棒了!现在它确实有效,非常感谢您的帮助,我希望这对其他人有用。我也学到了一些东西,非常感谢。
猜你喜欢
  • 2020-12-25
  • 2015-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多