嗨,我正尝试将索引为7 =“ Danmark”的所有行传递给另一个文件。 从CSV文件中,我收到错误“ IndexError:列表索引超出范围”。 希望你们能帮助我。
import csv #import the module csv
with open('akassedatareduced.csv', encoding="ISO-8859-1") as csvfile, open('nydata.csv', 'w') as output:
rowreader = csv.reader(csvfile)
fieldnames = ['CHURN/LOYAL', 'Medlemstype', 'Alder', 'Kon', 'Kommune', 'Uddannelsesnavn', 'Uddannelsessted', 'Land', 'Ledighed Historik', 'Telefon', 'Mobil', 'SamtaleType', 'Samtalested', 'Samtale maned', 'Churn maned', 'Dagpengeret maned', 'indmeldeses maned', 'fodselsdags maned']
writer = csv.DictWriter(output,delimiter= ',',fieldnames=fieldnames)
#writer= csv.DictWriter.writeheader(fieldnames)
for row in rowreader:
print(row[7])
if row[7] == "Danmark":
writer.writerow(row)
答案 0 :(得分:2)
似乎您的行格式错误。要自己调试,请使用try
/ except
子句捕获IndexError
:
for row in rowreader:
try:
if row[7] == "Danmark":
writer.writerow(row)
except IndexError:
print(row)
然后,要么让错误静默地通过,要么修复您的基础数据并重新运行。
答案 1 :(得分:0)
我希望使用csv.DictReader
。 DictReader将每一行转换为字典。这很有帮助,因为即使更改了列顺序或在两者之间插入/删除了任何列,脚本仍然可以工作。
使用DictReader时,您的代码将如下所示。
import csv #import the module csv
with open('akassedatareduced.csv', encoding="ISO-8859-1") as csvfile, open('nydata.csv', 'w') as output:
rowreader = csv.DictReader(csvfile)
fieldnames = ['CHURN/LOYAL', 'Medlemstype', 'Alder', 'Kon', 'Kommune', 'Uddannelsesnavn', 'Uddannelsessted', 'Land', 'Ledighed Historik', 'Telefon', 'Mobil', 'SamtaleType', 'Samtalested', 'Samtale maned', 'Churn maned', 'Dagpengeret maned', 'indmeldeses maned', 'fodselsdags maned']
writer = csv.DictWriter(output,delimiter= ',',fieldnames=fieldnames)
#writer= csv.DictWriter.writeheader(fieldnames)
for row in rowreader:
print(row["Land"]) # Access using column name
if row["Land"] == "Danmark": # Access using column name
writer.writerow(row)