2016-04-22 3 views
0

У меня возникли проблемы проектирования скрипта, который будет удалять указанные строки и столбцы из файла CSV. Вот мой сценарий до сих пор:TypeError в CSV очистка сценарий

import csv 
with open ("E:\\CSULB Grad\\2016 Spring\\Geog 588\\Project\\ACS_14_5YR_B02001_Copy.csv","rb") as csvfile: 
    reader=csv.reader(csvfile) 
with open ("E:\\CSULB Grad\\2016 Spring\\Geog 588\\Project\\ACS_14_5YR_B02001_Copy.csv","ab+") as csvfile2: 
    writer=csv.writer(csvfile2) 
    for row in csvfile2: 
     del row['HD02_VD01'] 
     writer.writerow(row) 

Вот ошибка отслеживающий я получаю:

Traceback (most recent call last): 
    File "C:\Python27\ArcGIS10.3\Lib\site-packages\pythonwin\pywin\framework\scriptutils.py", line 326, in RunScript 
    exec codeObject in __main__.__dict__ 
File "E:\CSULB Grad\2016 Spring\Geog 588\Project\Script2.py", line 7, in <module> 
    del row['HD02_VD01'] 
TypeError: 'str' object does not support item deletion 

ответ

1

Вы не можете изменить файл CSV на месте, как вы итерацию над ним. Подумайте о создании нового файла CSV, который записывает только те столбцы, которые вам нужны для каждой строки исходного файла.

Например:

with open(path,"wb") as csvfile: 
     writer = csv.DictWriter(csvfile, fieldnames = fieldNames) 
     for row in csvfile2: 
      writer.writerow({"Col1":row['...'],"Col2":row['...']}) 
+0

Можете ли вы сказать мне, что вы имеете в виду в на d1 в ({ "Col1": d1, "Col2": d2})? Мой курс не учил нас, как работать со словарями, и это похоже на то, что мы должны здесь делать. Код я пытался заканчивает тем, что импорт CSV с открытым ("E: \\ CSULB Град \\ 2016 \\ Spring GEOG 588 \\ Проект \\ ACS_14_5YR_B02001_Copy.csv", "а"), как csvfile: writer = csv.DictWriter (csvfile, fieldnames = fieldnames) writer.writerow ({'GEO.id': 'GEOID', 'GEO.id2': 'GEOID_2', 'GEO.display-label': 'CEN_TRACT' , 'HD01_VD01': 'POP_TOT'}) – daven520

+0

и я получаю этот Traceback Traceback (последний последний звонок): Файл «C: \ Python27 \ ArcGIS10.3 \ Lib \ site-packages \ pythonwin \ pywin \ framework \ scriptutils.py "строка 326, в RunScript Exec codeObject в __main __.__ dict__ Файл" E: \ CSULB Град \ 2016 Spring \ GEOG 588 \ Project \ Script4.py», линия 4, в writer.writerow ({ 'GEO.id': 'ГЕОИД', 'GEO.id2': 'GEOID_2', 'GEO.display метки': 'CEN_TRACT', 'HD01_VD01': 'POP_TOT'}) ValueError: dict содержит поля не в полевых именах: 'GEO.id2', 'GEO.id', 'HD01_VD01', 'GEO.display-label' – daven520

+0

См. отредактированный ответ. d1/d2 были просто произвольными именами переменных для данных, которые должны быть установлены. – Phillip

Смежные вопросы