Пропустить заголовки при редактировании файла csv с помощью Python
Я использую приведенный ниже код для редактирования csv с использованием Python. Функции, вызываемые в форме кода, составляют верхнюю часть кода.
Проблема: я хочу, чтобы приведенный ниже код начал редактирование csv из второй строки, я хочу, чтобы он исключил первую строку, содержащую заголовки. Сейчас он применяет функции только к первой строке, и моя строка заголовка изменяется.
- Python автоматически выбирает последовательные порты (для Arduino)
- Theano: Куда поместить файл .anorc для установки Anaconda? (Windows)
- Scikit Learn Gaussian HMM: ValueError: startprob должен суммироваться до 1.0
- Установите py2exe для python 2.7 over pip: для этого пакета требуется Python 3.3 или новее
- ImportError: нет модуля с именем pxssh
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
но это не сработало.
Пожалуйста, помогите мне в решении этой проблемы.
- Python пишет в файл, возвращает пустой файл
- Случайный "pythonw.exe перестает работать" сбой
- Телеграмма бот ждет ответа пользователя
- Python 3 urllib создает TypeError: данные POST должны быть байтами или итерируемыми байтами. Это не может быть типа str
- Опускание приоритета процесса многопроцессорности. Пул в Windows
3 Solutions collect form web for “Пропустить заголовки при редактировании файла csv с помощью Python”
Ваша 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)
чтобы пропустить одну строку.
- Форматирование валюты в Python
- Возможно ли реализовать цикл Python для диапазона без переменной итератора?