Пропустить заголовки при редактировании файла csv с помощью Python

Я использую приведенный ниже код для редактирования csv с использованием Python. Функции, вызываемые в форме кода, составляют верхнюю часть кода.

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

in_file = open("tmob_notcleaned.csv", "rb") reader = csv.reader(in_file) out_file = open("tmob_cleaned.csv", "wb") writer = csv.writer(out_file) row = 1 for row in reader: row[13] = handle_color(row[10])[1].replace(" - ","").strip() row[10] = handle_color(row[10])[0].replace("-","").replace("(","").replace(")","").strip() row[14] = handle_gb(row[10])[1].replace("-","").replace(" ","").replace("GB","").strip() row[10] = handle_gb(row[10])[0].strip() row[9] = handle_oem(row[10])[1].replace("Blackberry","RIM").replace("TMobile","T-Mobile").strip() row[15] = handle_addon(row[10])[1].strip() row[10] = handle_addon(row[10])[0].replace(" by","").replace("FREE","").strip() writer.writerow(row) in_file.close() out_file.close() 

Я попытался решить эту проблему, инициализируя переменную row до 1 но это не сработало.

Пожалуйста, помогите мне в решении этой проблемы.

Ваша reader переменная является итерируемой, перебирая ее, вы извлекаете строки.

Чтобы пропустить один элемент перед вашим циклом, просто вызовите next(reader, None) и проигнорируйте возвращаемое значение.

Вы также можете немного упростить свой код; используйте открытые файлы в качестве менеджеров контекстов, чтобы они автоматически закрывались:

 with open("tmob_notcleaned.csv", "rb") as infile, open("tmob_cleaned.csv", "wb") as outfile: reader = csv.reader(infile) next(reader, None) # skip the headers writer = csv.writer(outfile) for row in reader: # process each row writer.writerow(row) # no need to close, the files are closed automatically when you get to this point. 

Если вы хотите записать заголовок в выходной файл необработанным, это тоже легко, передайте вывод next() в writer.writerow() :

 headers = next(reader, None) # returns the headers or `None` if the input is empty if headers: writer.writerow(headers) 

Другим способом решения этого является использование класса DictReader, который «пропускает» строку заголовка и использует его для разрешенной именованной индексации.

Учитывая «foo.csv» следующим образом:

 FirstColumn,SecondColumn asdf,1234 qwer,5678 

Используйте DictReader следующим образом:

 import csv with open('foo.csv') as f: reader = csv.DictReader(f, delimiter=',') for row in reader: print(row['FirstColumn']) # Access by column header instead of column number print(row['SecondColumn']) 

Выполнение row=1 ничего не изменит, потому что вы просто перезапишите это с помощью результатов цикла.

Вы хотите сделать next(reader) чтобы пропустить одну строку.