Python如果代码帮助

时间:2015-01-05 18:11:01

标签: python csv

我需要一些帮助才能让一些Python代码正常工作。我有一个CSV文件,其中包含许多行和列。我需要完成的是使用Python在第2列中查找" iboxhy *"。如果找到此信息,则在同一行中,我需要更改第7,9和10列中的信息以读取" INDEXTRS"。我是使用Python的新手,所以非常感谢任何帮助。

这是我到目前为止所做的,但它不起作用(返回IndexError:列表索引超出范围):

import csv
file = open('test1218.csv')
file_new = open('test1218_2.csv', 'w')
reader = csv.reader(file, delimiter=',')
writer = csv.writer(file_new, delimiter=',')
for row in reader:
    if "iboxhy*" in row[2]:
        # CHANGE TO INDEXTRS
        row[10] = "INDEXTRS" # row K
        row[9] = "INDEXTRS" # row J
        row[7] = "INDEXTRS" # row H
    writer.writerow(row)

3 个答案:

答案 0 :(得分:1)

对输入数据进行抽样有助于我们提供更多帮助。

但是,我认为你可能忽略了这样一个事实:我们正在处理一个0索引文件,就列而言...所以"第2列和第34页;实际上是行[1]。

import csv
file = open('test1218.csv')
file_new = open('test1218_2.csv', 'w')
reader = csv.reader(file, delimiter=',')
writer = csv.writer(file_new, delimiter=',')
for row in reader:
    if "iboxhy*" in row[1]:
        # CHANGE TO INDEXTRS
        row[10] = "INDEXTRS" # row K
        row[9] = "INDEXTRS" # row J
        row[7] = "INDEXTRS" # row H
    writer.writerow(row)

答案 1 :(得分:0)

问题是row是一个0索引数组。这意味着第一列位于索引0。因此,第二列实际上是1,您的列H是6等等。

答案 2 :(得分:0)

除了已经给出的0索引答案之外,csv阅读器在输入文件中遇到空行时返回空行。如果你在csv文件的末尾有空行,你就会遇到这个问题。

如果你想真正宽恕输入,你可以捕捉并处理异常:

for row in reader:
    try:
        if "iboxhy*" in row[1]:
            # CHANGE TO INDEXTRS
            row[10] = "INDEXTRS" # row K
            row[9] = "INDEXTRS" # row J
            row[7] = "INDEXTRS" # row H
    except IndexError:
        pass
    writer.writerow(row)