Чтение и запись CSV-файлов в Python

Файлы CSV

Последнее обновление: 29.04.2017

Одним из распространенных файловых форматов, которые хранят в удобном виде информацию, является формат csv. Каждая строка в файле csv представляет отдельную запись или строку, которая состоит из отдельных столбцов, разделенных запятыми. Собственно поэтому формат и называется Comma Separated Values. Но хотя формат csv — это формат текстовых файлов, Python для упрощения работы с ним предоставляет специальный встроенный модуль csv.

Рассмотрим работу модуля на примере:

import csv FILENAME = «users.csv» users = [ [«Tom», 28], [«Alice», 23], [«Bob», 34] ] with open(FILENAME, «w», newline=»») as file: writer = csv.writer(file) writer.writerows(users) with open(FILENAME, «a», newline=»») as file: user = [«Sam», 31] writer = csv.writer(file) writer.writerow(user)

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

При открытии файла на запись в качестве третьего параметра указывается значение — пустая строка позволяет корректно считывать строки из файла вне зависимости от операционной системы.

Для записи нам надо получить объект writer, который возвращается функцией . В эту функцию передается открытый файл. А собственно запись производится с помощью метода Этот метод принимает набор строк. В нашем случае это двухмерный список.

Если необходимо добавить одну запись, которая представляет собой одномерный список, например, , то в этом случае можно вызвать метод writer.writerow(user)

В итоге после выполнения скрипта в той же папке окажется файл users.csv, который будет иметь следующее содержимое:

Tom,28 Alice,23 Bob,34 Sam,31

Для чтения из файла нам наоборот нужно создать объект reader:

import csv FILENAME = «users.csv» with open(FILENAME, «r», newline=»») as file: reader = csv.reader(file) for row in reader: print(row[0], » — «, row[1])

При получении объекта reader мы можем в цикле перебрать все его строки:

Tom — 28 Alice — 23 Bob — 34 Sam — 31

Работа со словарями

В примере выше каждая запись или строка представляла собой отдельный список, например, . Но кроме того, модуль csv имеет специальные дополнительные возможности для работы со словарями.

В частности, функция csv.DictWriter() возвращает объект writer, который позволяет записывать в файл. А функция csv.DictReader() возвращает объект reader для чтения из файла. Например:

import csv FILENAME = «users.csv» users = [ {«name»: «Tom», «age»: 28}, {«name»: «Alice», «age»: 23}, {«name»: «Bob», «age»: 34} ] with open(FILENAME, «w», newline=»») as file: columns = [«name», «age»] writer = csv.DictWriter(file, fieldnames=columns) writer.writeheader() # запись нескольких строк writer.writerows(users) user = {«name» : «Sam», «age»: 41} # запись одной строки writer.writerow(user) with open(FILENAME, «r», newline=»») as file: reader = csv.DictReader(file) for row in reader: print(row[«name»], «-«, row[«age»])

Запись строк также производится с помощью методов и . Но теперь каждая строка представляет собой отдельный словарь, и кроме того, производится запись и заголовков столбцов с помощью метода writeheader(), а в метод csv.DictWriter в качестве второго параметра передается набор столбцов.

При чтении строк, используя названия столбцов, мы можем обратиться к отдельным значениям внутри строки: .

НазадСодержаниеВперед

Python: красивые таблицы в консольном выводе

№ 8577 В разделах: АдминистрированиеПрограммирование от December 24th, 2017,

На днях понадобилось красиво вывести статистику по логам nginx и тут пришел на помощь python с его горой всевозможных библиотечек и прочих рюшечек. Я использовал библиотеку . Установить ее в отдельное окружение или в систему это на ваше усмотрение, ну а я предпочитаю котлеты отдельно, мухи отдельно.

Просто оставляю вам пример, который вы легко адаптируете под себя.

import csv from terminaltables import AsciiTable successCounter = 0 redirectCounter = 0 clientErrorCounter = 0 serverErrorCounter = 0 serverErrorCounter500 = 0 serverErrorCounter502 = 0 pathPrefix = ‘./’ #local # pathPrefix = ‘/var/log/’ #server with open(pathPrefix+’nginx/http.access.log’) as nginxLogFile: logStringsIterable = csv.reader(nginxLogFile, delimiter=»,», quotechar='»‘, lineterminator=»;») for logString in logStringsIterable: # custom nginx log file: # log_format compression ‘»$remote_addr»,»$time_local»,»$status»,»$request»;’; # Position | Description # 0 | IP address # 1 | Time stamp # 2 | Response code # 3 | Request [type url protocol] if ’20’ in logString[2]: successCounter += 1 if ’30’ in logString[2]: redirectCounter += 1 if ’40’ in logString[2]: clientErrorCounter += 1 if ‘500’ in logString[2]: serverErrorCounter500 += 1 if ‘502’ in logString[2]: serverErrorCounter502 += 1 if ’50’ in logString[2]: serverErrorCounter += 1 # summary tableData = [ [‘HTTP codes’, ‘Type’, ‘Count’], [’20x’, ‘Success’, «{:,}».format(successCounter)], [’30x’, ‘Redirection’, «{:,}».format(redirectCounter)], [’40x’, ‘Client errors’, «{:,}».format(clientErrorCounter)], [‘500’, ‘Server errors’, «{:,}».format(serverErrorCounter500)], [‘502’, ‘Server errors’, «{:,}».format(serverErrorCounter502)], [’50x’, ‘Server errors’, «{:,}».format(serverErrorCounter)] ] resultTable = AsciiTable(tableData) resultTable.inner_heading_row_border = True resultTable.outer_border = False resultTable.inner_row_border = False print(resultTable.table)

Нет комментариев »

Язык программирования Python 3 — это мощный инструмент для создания программ самого разнообразного назначения, доступный даже для новичков. С его помощью можно решать задачи различных типов.

Этот сайт призван помочь начинающим и чайникам научиться программировать на python 3. Также здесь можно подробнее узнать об особенностях функционирования этого языка.

Язык Python обладает некоторыми примечательными особенностями, которые обуславливают его широкое распространение. Поэтому прежде чем изучать python, следует рассказать о его достоинствах и недостатках.

Python 3: преимущества и недостатки языка

  1. Python — интерпретируемый язык программирования. С одной стороны, это позволяет значительно упростить отладку программ, с другой — обуславливает сравнительно низкую скорость выполнения.
  2. Динамическая типизация. В python не надо заранее объявлять тип переменной, что очень удобно при разработке.
  3. Хорошая поддержка модульности. Вы можете легко написать свой модуль и использовать его в других программах.
  4. Встроенная поддержка Unicode в строках. В Python необязательно писать всё на английском языке, в программах вполне может использоваться ваш родной язык.
  5. Поддержка объектно-ориентированного программирования. При этом его реализация в python является одной из самых понятных.
  6. Автоматическая сборка мусора, отсутствие утечек памяти.
  7. Интеграция с C/C++, если возможностей python недостаточно.
  8. Понятный и лаконичный синтаксис, способствующий ясному отображению кода. Удобная система функций позволяет при грамотном подходе создавать код, в котором будет легко разобраться другому человеку в случае необходимости. Также вы сможете научиться читать программы и модули, написанные другими людьми.
  9. Огромное количество модулей, как входящих в стандартную поставку Python 3, так и сторонних. В некоторых случаях для написания программы достаточно лишь найти подходящие модули и правильно их скомбинировать. Таким образом, вы можете думать о составлении программы на более высоком уровне, работая с уже готовыми элементами, выполняющими различные действия.
  10. Кроссплатформенность. Программа, написанная на Python, будет функционировать совершенно одинаково вне зависимости от того, в какой операционной системе она запущена. Отличия возникают лишь в редких случаях, и их легко заранее предусмотреть благодаря наличию подробной документации.

Изучение языка программирования python — это просто и понятно даже для чайников. Уже сейчас вы можете скачать python и написать свою первую программу!

Также у нас появился самоучитель Python, собранный из материалов данного сайта. Удачного изучения Python!

Добавить комментарий

Закрыть меню