Пропустить заголовки при редактировании csv-файла с помощью Python
Я использую ниже указанный код для редактирования csv с помощью Python. Функции, вызываемые в коде, образуют верхнюю часть кода.
проблема: я хочу, чтобы приведенный ниже код начал редактирование csv из 2-й строки, Я хочу, чтобы он исключал 1-ю строку, содержащую заголовки. Сейчас он применяет функции на 1-й строке и моя строка заголовка изменится.
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 но это не работа.
пожалуйста, помогите мне в решении этого вопроса.
3 ответов:
код
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()towriter.writerow():headers = next(reader, None) # returns the headers or `None` if the input is empty if headers: writer.writerow(headers)
учитывая "фу.КШМ" следующим образом:
FirstColumn,SecondColumn asdf,1234 qwer,5678используйте диктофон следующим образом:
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)пропустить одну строку.
Comments