Python csv get headers

Работа с файлами в формате CSV#

CSV (comma-separated value) — это формат представления табличных данных (например, это могут быть данные из таблицы или данные из БД).

В этом формате каждая строка файла — это строка таблицы. Несмотря на название формата, разделителем может быть не только запятая.

И хотя у форматов с другим разделителем может быть и собственное название, например, TSV (tab separated values), тем не менее, под форматом CSV понимают, как правило, любые разделители.

Пример файла в формате CSV (sw_data.csv):

hostname,vendor,model,location sw1,Cisco,3750,London sw2,Cisco,3850,Liverpool sw3,Cisco,3650,Liverpool sw4,Cisco,3650,London 

В стандартной библиотеке Python есть модуль csv, который позволяет работать с файлами в CSV формате.

Чтение#

Пример чтения файла в формате CSV (файл csv_read.py):

import csv with open('sw_data.csv') as f: reader = csv.reader(f) for row in reader: print(row) 
$ python csv_read.py ['hostname', 'vendor', 'model', 'location'] ['sw1', 'Cisco', '3750', 'London'] ['sw2', 'Cisco', '3850', 'Liverpool'] ['sw3', 'Cisco', '3650', 'Liverpool'] ['sw4', 'Cisco', '3650', 'London']

В первом списке находятся названия столбцов, а в остальных соответствующие значения.

Обратите внимание, что сам csv.reader возвращает итератор:

In [1]: import csv In [2]: with open('sw_data.csv') as f: . : reader = csv.reader(f) . : print(reader) . : _csv.reader object at 0x10385b050> 

При необходимости его можно превратить в список таким образом:

In [3]: with open('sw_data.csv') as f: . : reader = csv.reader(f) . : print(list(reader)) . : [['hostname', 'vendor', 'model', 'location'], ['sw1', 'Cisco', '3750', 'London'], ['sw2', 'Cisco', '3850', 'Liverpool'], ['sw3', 'Cisco', '3650', 'Liverpool'], ['sw4', 'Cisco', '3650', 'London']] 

Чаще всего заголовки столбцов удобней получить отдельным объектом. Это можно сделать таким образом (файл csv_read_headers.py):

import csv with open('sw_data.csv') as f: reader = csv.reader(f) headers = next(reader) print('Headers: ', headers) for row in reader: print(row) 

Иногда в результате обработки гораздо удобней получить словари, в которых ключи — это названия столбцов, а значения — значения столбцов.

Для этого в модуле есть DictReader (файл csv_read_dict.py):

import csv with open('sw_data.csv') as f: reader = csv.DictReader(f) for row in reader: print(row) print(row['hostname'], row['model']) 
$ python csv_read_dict.py sw1 3750 sw2 3850 sw3 3650 sw4 3650

До Python 3.8 возвращался отдельный тип упорядоченные словари (OrderedDict).

Запись#

Аналогичным образом с помощью модуля csv можно и записать файл в формате CSV (файл csv_write.py):

import csv data = [['hostname', 'vendor', 'model', 'location'], ['sw1', 'Cisco', '3750', 'London, Best str'], ['sw2', 'Cisco', '3850', 'Liverpool, Better str'], ['sw3', 'Cisco', '3650', 'Liverpool, Better str'], ['sw4', 'Cisco', '3650', 'London, Best str']] with open('sw_data_new.csv', 'w') as f: writer = csv.writer(f) for row in data: writer.writerow(row) with open('sw_data_new.csv') as f: print(f.read()) 

В примере выше строки из списка сначала записываются в файл, а затем содержимое файла выводится на стандартный поток вывода.

$ python csv_write.py hostname,vendor,model,location sw1,Cisco,3750,"London, Best str" sw2,Cisco,3850,"Liverpool, Better str" sw3,Cisco,3650,"Liverpool, Better str" sw4,Cisco,3650,"London, Best str"

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

Так получилось из-за того, что во всех строках последнего столбца есть запятая. И кавычки указывают на то, что именно является целой строкой. Когда запятая находится в кавычках, модуль csv не воспринимает её как разделитель.

Иногда лучше, чтобы все строки были в кавычках. Конечно, в данном случае достаточно простой пример, но когда в строках больше значений, то кавычки позволяют указать, где начинается и заканчивается значение.

Модуль csv позволяет управлять этим. Для того, чтобы все строки записывались в CSV-файл с кавычками, надо изменить скрипт таким образом (файл csv_write_quoting.py):

import csv data = [['hostname', 'vendor', 'model', 'location'], ['sw1', 'Cisco', '3750', 'London, Best str'], ['sw2', 'Cisco', '3850', 'Liverpool, Better str'], ['sw3', 'Cisco', '3650', 'Liverpool, Better str'], ['sw4', 'Cisco', '3650', 'London, Best str']] with open('sw_data_new.csv', 'w') as f: writer = csv.writer(f, quoting=csv.QUOTE_NONNUMERIC) for row in data: writer.writerow(row) with open('sw_data_new.csv') as f: print(f.read()) 
$ python csv_write_quoting.py "hostname","vendor","model","location" "sw1","Cisco","3750","London, Best str" "sw2","Cisco","3850","Liverpool, Better str" "sw3","Cisco","3650","Liverpool, Better str" "sw4","Cisco","3650","London, Best str"

Теперь все значения с кавычками. И поскольку номер модели задан как строка в изначальном списке, тут он тоже в кавычках.

Кроме метода writerow, поддерживается метод writerows. Ему можно передать любой итерируемый объект.

Например, предыдущий пример можно записать таким образом (файл csv_writerows.py):

import csv data = [['hostname', 'vendor', 'model', 'location'], ['sw1', 'Cisco', '3750', 'London, Best str'], ['sw2', 'Cisco', '3850', 'Liverpool, Better str'], ['sw3', 'Cisco', '3650', 'Liverpool, Better str'], ['sw4', 'Cisco', '3650', 'London, Best str']] with open('sw_data_new.csv', 'w') as f: writer = csv.writer(f, quoting=csv.QUOTE_NONNUMERIC) writer.writerows(data) with open('sw_data_new.csv') as f: print(f.read()) 

DictWriter#

С помощью DictWriter можно записать словари в формат CSV.

В целом DictWriter работает так же, как writer, но так как словари не упорядочены, надо указывать явно в каком порядке будут идти столбцы в файле. Для этого используется параметр fieldnames (файл csv_write_dict.py):

import csv data = [ 'hostname': 'sw1', 'location': 'London', 'model': '3750', 'vendor': 'Cisco' >,  'hostname': 'sw2', 'location': 'Liverpool', 'model': '3850', 'vendor': 'Cisco' >,  'hostname': 'sw3', 'location': 'Liverpool', 'model': '3650', 'vendor': 'Cisco' >,  'hostname': 'sw4', 'location': 'London', 'model': '3650', 'vendor': 'Cisco' >] with open('csv_write_dictwriter.csv', 'w') as f: writer = csv.DictWriter( f, fieldnames=list(data[0].keys()), quoting=csv.QUOTE_NONNUMERIC) writer.writeheader() for d in data: writer.writerow(d) 

Указание разделителя#

Иногда в качестве разделителя используются другие значения. В таком случае должна быть возможность подсказать модулю, какой именно разделитель использовать.

Например, если в файле используется разделитель ; (файл sw_data2.csv):

hostname;vendor;model;location sw1;Cisco;3750;London sw2;Cisco;3850;Liverpool sw3;Cisco;3650;Liverpool sw4;Cisco;3650;London 

Достаточно просто указать, какой разделитель используется в reader (файл csv_read_delimiter.py):

import csv with open('sw_data2.csv') as f: reader = csv.reader(f, delimiter=';') for row in reader: print(row) 

Источник

CSV — Python Read & Write

This tutorial covers How to Read and Write CSV files in python with example tutorials..

    Read csv files without headers using csv module reader function, and read headers with the DictReader class in python

How to read csv files in python

python has CSV library, that you need to read and write modules emp.csv file contains comma-separated values as given

Read csv file line by line

First, Import csv module into the code using the import statement

Next, Open the file using open with the name of the file.

If file not found, It throws FileNotFoundError: [Errno 2] No such file or directory: . and stacktrace is

 file = open('emp1.csv') FileNotFoundError: [Errno 2] No such file or directory: 'emp.csv' 

next, Create a reader using csv reader function, and pass the file variable to it.

use for in loop to read the line by line, and print the line. Each line is a row in a csv file with many columns.

Here is a complete example

You can access individual values using line[0] for first value, second value using line[1]

How to read csv file with header in Python

Sometimes, CSV file contains headers id,name,salary,dept as given below First line contains the header columns.

 DictReader class used instead reader function. It pro
  • Create a DictReader class
  • Iterate each row using for in loop
  • print using row[columnname] to get the value

import csv with open(“emp.csv”) as csvfile: reader = csv.DictReader(csvfile) for row in reader: print(row[‘id’]+» — “+row[’name’])

How to write to CSV file in Python

  • Create a Writer using DictWriter with file and headernames
  • Write header using writeheader(), creates first line of header column names
  • Add data using writeRow function with an object of key and values.

Here is a python write CSV file example

) writer.writerow() writer.writerow() 

emp1.csv file created with below rows

Источник

How to Read CSV with Headers Using Pandas?

Pandas Read CSV With Headers

While Python is all game for analyzing data, it is not inherently blessed with the sources of data sets that ought to be analysed. All these data sets are to be sourced from elsewhere & are to be fed into Python for the magic to happen. We shall explore one such technique for importing data into Python using one of its in-built features. The file of interest in this article shall also be a bit specific – a CSV file with headers!

We shall demonstrate the sequence of operations using the following dataset in which each entry in a row is separated from each other by a ‘tab’. Let’s get started!

Sample Dataset

Importing Pandas:

One shall get things started by importing the Pandas library into the active Python window using the below code.

Hit enter once done & wait for a few moments while the software loads the ‘Pandas’ library in the backend. This can very well be spotted by the arrowheads preceding every line of code. These arrows shall not appear in the new line before the ‘Pandas’ are fully loaded.

Pandas Loading

Only upon successful loading of the Pandas, these arrowheads shall appear as shown in the below image.

Arrows Appear

Using read_csv() to read CSV files with headers

CSV stands for comma-separated values. Which values, you ask – those that are within the text file!

What it implies is that the values within the text file are separated by a comma to isolate one entry from the other. Though it states only ‘comma’ as a separator, CSV is broadly used to denote the text files within which the separation is carried out by tabs or spaces or even colons, to name a few.

df = pd.read_csv(“filename.txt”,sep=”x”, header=y, names=[‘name1’, ‘name2’…])
Оцените статью