【问题标题】:Index error list out of range索引错误列表超出范围
【发布时间】:2017-10-30 21:56:27
【问题描述】:

编辑:我认为问题与 csv 文件正文中的空白行有关。我尝试了许多修复但无济于事。令人沮丧,因为这段代码最初是有效的,如果有人有任何想法让我继续我的生活,我将不胜感激:)

我有这个代码工作。它将从 csv 文件输入并将特定列输出到文本文件。我试图让它只打印row[32] 包含文本的行。自从我开始弄乱它以来,它根本不起作用。

它现在给了我错误Index error: list out of range。 csv 文件包含许多列和行,因此绝对不会超出范围。看着它,我眼睛瞪得滚圆,以至于我再也看不到树上的木头了。我可能完全搞砸了,也可能只是一些小问题。

import csv
import os

with open("raw.csv", "r") as f, open("txtfile.txt", "w") as output:
    r = csv.reader(f)
    for row in r:
        output.write("{} --- {} --- {}\n".format(row[4], row[1], row[6]))

with open("txtfile.txt", "w") as output:
    output.write(str(r)+"\r\n")
    print("Written successfully")

with open("raw.csv", "r") as f, open("txtfile.txt", "w") as output:
    r = csv.reader(f)
    for row in r:
        if "Active" in row[0] and "Text1"in row[1] or "Text2" in row[1]   or "Burglary" in row[1]:
            output.write("{} - {} - {}\n".format(row[4], row[6], row[1])  

【问题讨论】:

  • 使用row[] 时,[] 内的值指的是列标题。所以row[6] 打印第 6 列中每一行的值,而不是文件中第 6 行的值。
  • 我就是这么想的,前几天那部分还在工作

标签: python csv indexing range


【解决方案1】:

我最终解决了这个问题。这与空行有关,所以我在 if 语句中添加了“in row and row[]”字样。这具有忽略空白行的影响,因此不会给我索引错误。添加 "and row[32] 确保它只打印 row[32] 包含文本的行

with open("test.csv", "r") as f, open("cops.txt", "w") as output:
    r = csv.reader(f)
    for row in r:
        if "Active" in row and row[0] and row[32]:     
            output.write("{} - {} - {}".format(row[4], row[1], row[6])
            + "  {} \n \n".format(row[19]) + "  {} \n \n".format(row[32]) + "
            {}\n\n".format(row[13]) + "\n\n")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-12
    • 1970-01-01
    • 2016-01-06
    • 2021-06-08
    相关资源
    最近更新 更多