我需要一些帮助才能让一些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)
答案 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)