如果row [index] ==“ String” python,则将行写入新的csv

时间:2018-10-29 10:10:43

标签: python python-3.x

嗨,我正尝试将索引为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)

2 个答案:

答案 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)