【问题标题】:extract a column from text file从文本文件中提取一列
【发布时间】:2015-08-25 12:28:32
【问题描述】:

我有一个包含 25 列的文本文件(大量浮点数)。我想提取第 14 列并将其除以第 15 列。我无法提取这两列。
代码:

with open('sample for north.txt') as infile:
    for line in infile:
        print(line.split()[13])

错误:列表索引超出范围

【问题讨论】:

  • print(line.split()) 带给你什么?
  • @tmoreau 结果是 ['#']

标签: python matrix


【解决方案1】:

您收到错误Error : list index out of range,因为没有足够的列(至少在给定的行上)。最好检查一下,沿着这条线:

with open('sample for north.txt') as infile:
    for line in infile:
        parts = line.split()
        if len(parts) > 13: # or whatever is appropriate
           print(parts[13])

解释:当你分割一行时,它会返回一个项目列表。例如,如果有 3 列,.split() 将返回包含 3 个项目的列表。列表的长度当然会因数据而异。

您的代码假定给定行上始终存在所需数量的项目,并尝试访问列表中索引 13 处的项目。但是,您的数据文件中必须至少有一行不是案例,这就是您的代码崩溃的原因。因此,最好在尝试访问列表中的给定索引之前检查列表的长度。

即,我将行拆分为“部分”,然后在尝试访问之前检查了它的长度。

【讨论】:

  • 它完美地工作。谢谢。你能告诉我为什么吗?不好意思说,但听不懂。
  • @kian 很高兴能够提供帮助。我在答案中添加了解释,看看是否有帮助。
【解决方案2】:

split() 没有任何分隔符信息,在空格上进行分割:

"1 2 3".split() returns ["1","2","3"]

因此,请务必检查您使用的分隔符。 Look for str.split.

还要注意,列表是由字符串组成的,而不是数值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-03
    • 1970-01-01
    • 1970-01-01
    • 2011-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多