csv — Читання та запис CSV файлів
Так званий формат CSV (значення, розділені комами) є найбільш поширеним форматом імпорту та експорту електронних таблиць та баз даних. Формат CSV використовувався протягом багатьох років до спроб описати формат стандартизованим чином RFC 4180. Відсутність чітко визначеного стандарту означає, що у даних, вироблених і споживаних різними додатками, часто є незначні відмінності. Ці відмінності можуть викликати роздратування при обробці CSV-файлів з декількох джерел. Тим не менш, хоча роздільники та символи лапок різняться, загальний формат досить схожий, щоб можна було написати один модуль, який може ефективно маніпулювати такими даними, приховуючи деталі читання та запису даних від програміста.
Модуль CSV реалізує класи для читання та запису табульованих даних у форматі CSV. Він дозволяє програмістам говорити, «запиши дані у форматі, який віддається перевагу Excel», або «прочитай дані з файлу, який був створений Excel», не знаючи точних деталей формату CSV, що використовується в Excel. Програмісти також можуть описати формати CSV, зрозумілі іншим додаткам або визначити власні спеціальні формати CSV.
Об'єкти reader та writer модуля csv читають та пишуть послідовності. Програмісти можуть також читати та записувати дані у словниковій формі, використовуючи класи DictReader та DictWriter.
PEP 305 - CSV файловий API Пропозиція щодо покращення Python, що запропонувала цей додаток до Python.
Модуль CSV визначає такі функції:
csv. reader ( csvfile, dialect='excel', **fmtparams )
Повертає об'єкт reader, який ітеруватиметься по рядках у наданому csvfile. csvfile може бути будь-яким об'єктом, який підтримує протокол ітератор і повертає рядок щоразу, коли викликається метод __next__() файлового об'єкта чи об'єкта списку. Якщо csvfile є файловим об'єктом, його потрібно відкрити з параметром newline='' . [1] Додатковий параметр dialect використовується визначення ряду параметрів, характерних для специфічного CSV діалекту. Це може бути сутність підкласу класу Dialect або одним із рядків, що повертається функцією list_dialects() . Також можуть надсилатися інші додаткові ключові аргументи fmtparams для визначення окремих параметрів форматування в поточному діалекті. Докладніші відомості про параметри діалекту та форматування див. у розділі Діалекти та параметри форматування.
Кожен рядок, зчитаний із файлу csv, повертається у вигляді списку рядків. Автоматичне перетворення типів даних не виконується, якщо не вказано параметр формату QUOTE_NONNUMERIC (у цьому випадку поля без лапок перетворюються на числа з плаваючою точкою).
Короткий приклад використання:
>>>
import
csv
>>>
with
open('eggs.csv',
newline='')
as
csvfile:
.
spamreader
=
csv.reader(csvfile,
delimiter=' ',
quotechar='|')
.
for
row
in
spamreader:
.
print(', '.join(row))
Spam, Spam, Spam, Spam, Spam, Baked Beans
Spam, Lovely Spam, Wonderful Spam
Повертає об'єкт writer, що відповідає за перетворення даних користувача з окремими рядками в наданий файлоподібний об'єкт. csvfile може бути будь-яким об'єктом з методом write(). Якщо csvfile є файловим об'єктом, його слід відкрити за допомогою newline = ''[1]. Додатковий параметр dialect використовується визначення ряду параметрів, характерних для специфічного CSV діалекту. Це може бути сутність підкласу класу Dialect або одним із рядків, що повертається функцією list_dialects() . Також можуть надсилатися інші додаткові ключові аргументи fmtparams для визначення окремих параметрів форматування в поточному діалекті. Докладніші відомості про параметри діалекту та форматування див. у розділі Діалекти та параметри форматування. Для максимально простої взаємодії з модулями, що реалізують DB API, значення None записується як порожній рядок. У той час як це незворотне перетворення, але воно допомагає зробити простіше SQL дамп із NULL даними в CSV файли без попередньої обробки даних, що повертаються викликом cursor.fetch*. Усі інші нерядкові дані перед записом стрингифікуються функцією str() .
Короткий приклад використання:
import
csv
with
open('eggs.csv',
'w',
newline='')
as
csvfile:
spamwriter
=
csv.writer(csvfile,
delimiter=' ',
quotechar='|',
quoting=csv.QUOTE_MINIMAL)
spamwriter.writerow(['Spam']
*
5
+
['Baked Beans'])
spamwriter.writerow(['Spam',
'Lovely Spam',
'Wonderful Spam'])
Зв'язування dialect з name. name має бути рядком. dialect може бути визначений передавши підклас Dialect або ключові аргументи fmtparams або обидва, з ключовими аргументами, що перевизначають параметри діалекту. Щоб отримати докладніші відомості про діалект і параметри форматування, див. розділ Діалекти та параметри форматування.
csv. unregister_dialect ( name )
Видаляє діалект, пов'язаний з name зареєстрованого діалекту. Викликається Error, якщо name незареєстроване ім'я діалекту.
csv. get_dialect ( name )
Повертає діалект, пов'язаний з name. Викликається Error, якщо name незареєстроване ім'я діалекту. Функція повертає незмінний Dialect.
Повертає найменування всіх зареєстрованих діалектів.
csv. field_size_limit ([ new_limit ] )
Повертає поточний розмір поля, дозволеного парсером. Якщо new_limit переданий, він стає новим обмеженням.
Модуль CSV визначає такі класи:
Створює об'єкт, що працює як звичайний reader, але відображає інформацію кожного рядка в dict, ключі якого задаються необов'язковим параметром fieldnames.
Параметр fieldnames є послідовністю. Якщо fieldnames пропущено значення в першому рядку файлу f будуть використовуватися як імена полів. Незалежно від того, як визначаються імена полів, словник зберігає їхній початковий порядок.
Якщо у рядка більше полів, ніж fieldnames, дані, що залишаються, поміщаються в список і зберігаються з fieldname, визначеним restkey (за замовчуванням None ). Якщо у не порожнього рядка менше полів, ніж fieldnames, відсутні значення заповнюються значеннями restval (за замовчуванням None).
Всі інші додаткові або ключові аргументи передаються основною сутністю reader.
Змінено у версії 3.6: Порядки, що повертаються, тепер мають тип OrderedDict .
Змінено у версії 3.8: Повернені рядки мають тип dict .
Короткий приклад використання:
>>>
import
csv
>>>
with
open('names.csv',
newline='')
as
csvfile:
.
reader
=
csv.DictReader(csvfile)
.
for
row
in
reader:
.
print(row['first_name'],
row['last_name'])
.
Eric Idle
John Cleese
>>>
print(row)
Створює об'єкт, який працює як звичайний літер, але відображає словники на вихідні рядки. Параметр fieldnames - це послідовність ключів, що ідентифікують порядок, в якому значення словника, передані методом writerow() записуються у файл f. Необов'язковий параметр restval вказує значення для запису, якщо у словнику відсутній ключ fieldnames. Якщо словник, переданий методом writerow() , містить ключ, не знайдений у fieldnames, необов'язковий параметр extrasaction показує, яку дію потрібно вжити.Якщо встановлено значення 'raise' (значення за промовчанням), виключається ValueError . Якщо встановлено значення 'ignore', додаткові значення у словнику ігноруються. Будь-які інші необов'язкові чи ключові аргументи передаються в базову суть writer.
Зверніть увагу, що на відміну від класу DictReader , параметр fieldnames класу DictWriter не є опціональним.
Короткий приклад використання:
import
csv
with
open('names.csv',
'w',
newline='')
as
csvfile:
fieldnames
=
['first_name',
'last_name']
writer
=
csv.DictWriter(csvfile,
fieldnames=fieldnames)
writer.writeheader()
writer.writerow('first_name':
'Baked',
'last_name':
'Beans'>)
writer.writerow('first_name':
'Lovely',
'last_name':
'Spam'>)
writer.writerow('first_name':
'Wonderful',
'last_name':
'Spam'>)
Dialect клас є контейнером класу, заснованим головним чином на його атрибутах, які використовуються для визначення параметрів для сутності reader або writer .
Клас Excel визначає звичайні властивості створюваного файлу Excel CSV. Зареєстрований з іменем діалекту 'excel'.
class csv. excel_tab
Клас excel_tab визначає звичайні властивості виробленого Excel розділеного TAB'ами файлу. Він зареєстрований з іменем діалекту 'excel-tab'.
class csv. unix_dialect
Клас unix_dialect визначає стандартні характеристики файлу CSV, що генерується в системах UNIX, тобто. використовуючи '\n' як термінатор рядка і заковикуючи всі поля. Зареєстрований з діалектним 'unix'.
Додано у версії 3.2.
Клас Sniffer використовується для виведення формату CSV.
У класі Sniffer передбачено два методи:
sniff ( sample, delimiters=None )
Проаналізувати цей sample і повернути підклас Dialect, що відображає знайдені параметри. Якщо додатковий параметр надано delimiters, він інтерпретується як рядок, що містить можливі допустимі символи роздільника.
Аналізує типовий текст (передбачається, що він у форматі CSV) і повертає True якщо перший рядок, здається, рядком заголовків колонки.
with
open('example.csv',
newline='')
as
csvfile:
dialect
=
csv.Sniffer().sniff(csvfile.read(1024))
csvfile.seek(0)
reader
=
csv.reader(csvfile,
dialect)
# .обробка CSV файлу, що міститься тут.
Модуль CSV визначає наступні константи:
Наказує writer об'єктам закочувати всі поля.
Наказує writer об'єктам закочувати тільки ті поля, які містять спеціальні символи, такі як delimiter, quotechar або будь-який із символів у lineterminator.
Наказує writer об'єктам закочувати всі нечислові поля.
Дає вказівку reader перетворювати всі незакуті поля на тип float.
Наказує writer об'єктам ніколи не закочувати поля. delimiter з'являється у вихідних даних, йому передує поточний символ escapechar. escapechar не буде встановлено, то writer підніме Error, якщо зіткнеться з будь-якими символами, які вимагають екранування.
Дає вказівку reader не виконувати спеціальну обробку символів цитати.
Модуль CSV визначає наступний виняток:
exception csv.
Викликається будь-якою функцією виявлення помилки.
Діалекти та параметри форматування
Для спрощення завдання формату вхідних і вихідних записів, параметри форматування групуються в діалекти. . На додаток, або замість параметра. dialect, програміст може також визначити окремі параметри форматування, які мають ті ж імена як атрибути, визначені нижче для класу Dialect .
Діалекти підтримують такі атрибути:
Односимвольний рядок, який використовується для відділення полів.
Керує тим, як сутності quotechar, що з'являються всередині поля, повинні самостійно закочуватися. escapechar - використовується як префікс до quotecharЗа замовчуванням він True.
При виведенні, якщо doublequote False та не встановлений escapechar, викликається Error , якщо quotechar знайдений у полі.
Односимвольний рядок використовується writer, щоб екранувати delimiter, якщо quoting встановлений у QUOTE_NONE та quotechar, якщо doublequote - False . escapechar видаляє будь-яке особливе значення з наступного символу. За замовчуванням використовується значення None, яке відключає екранування.
Використовуваний рядок використовується для завершення рядка, зроблений writer .
У reader жорстко закодовані розпізнавальні символи '\r' або '\n' як кінець рядка та ігнорує lineterminator. Ця поведінка може змінитися в майбутньому.
Одиносимвольний рядок, що використовується для загартування полів, що містять спеціальні символи, такі як delimiter або quotechar, або які містять символи нового рядка.
Контролює, коли лапки повинні генеруватися writer і розпізнавати reader.
При True , прогалини безпосередньо наступні за delimiter, ігноруються.
Коли True викликає виняток Error на поганому вхідному CSV За замовчуванням — False .
Об'єкти Reader
Об'єкти Reader ( DictReader сутності та об'єкти, що повертаються функцією reader() ) містять такі публічні методи:
Повертає наступний рядок ітерабельного об'єкта reader у вигляді списку (якщо об'єкт повернуто з reader() ) або dict (якщо це екземпляр DictReader ), що розпарюється відповідно до поточного діалекту. Зазвичай ви повинні викликати його як next (reader).
Об'єкти Reader містять такі публічні атрибути:
Опис діалекту лише читання, що використовує парсер.
Кількість стік читаних з джерела, що ітерується. Це не те саме, що і кількість записів, що повертаються, оскільки записи можуть охопити кілька рядків.
Об'єкти DictReader мають наступний публічний атрибут:
Якщо не передано як параметр, що створюється об'єкту, цей атрибут ініціалізується при першому доступі або при читанні першого запису з файлу.
Writer об'єкти
У об'єктів Writer ( DictWriter сутності та об'єкти, повернуті функцією writer() ), є наступні публічні методи. row повинен бути ітератором рядків чи чисел для об'єктів Writer та словника, що відображає імена полів у рядки чи числа (передавши їм спочатку str() ) для об'єктів DictWriter . Зауважте, що комплексні числа записуються в оточенні батьків. Це може спричинити деякі проблеми для інших програм, які читають файли CSV (за умови, що вони взагалі підтримують комплексні числа).
csvwriter. writerow ( row )
Записати параметр row у файл об'єкта writer, відформатованого згідно з поточним діалектом. Поверне повертається значення, що викликається write шляхом основного об'єкта файла.
Змінено у версії 3.5: Додано підтримку довільних ітераторів.
Написати всі елементи в rows (ітерований з об'єктів row, як описано вище) до об'єкта файлу writer'a, відформатованого згідно з поточним діалектом.
Об'єкти Writer містять наступний публічний атрибут:
Опис діалекту, використовуваного Writer'ом лише для читання.
Об'єкти DictWriter мають наступний публічний метод:
Записати рядок з іменами полів (як визначено у конструкторі) в об'єкт файлу письменника, відформатований згідно з поточним діалектом. Поверне значення csvwriter.writerow(), що повертається, викликається і використовується всередині.
Додано у версії 3.2.
Змінено у версії 3.8: writeheader() тепер також повертає значення, повернене csvwriter.writerow() методом, який він використовує усередині.
Приклади
Найпростіший приклад читання CSV файлу:
import
csv
with
open('some.csv',
newline='')
as
f:
reader
=
csv.reader(f)
for
row
in
reader:
print(row)
Читання файлу з альтернативним форматом:
import
csv
with
open('passwd',
newline='')
as
f:
reader
=
csv.reader(f,
delimiter=':',
quoting=csv.QUOTE_NONE)
for
row
in
reader:
print(row)
Відповідний найпростіший приклад запису:
import
csv
with
open('some.csv',
'w',
newline='')
as
f:
writer
=
csv.writer(f)
writer.writerows(someiterable)
Оскільки open() використовується для відкриття CSV файлу для читання, файл буде за замовчуванням декодований в юнікоді використовуючи системне кодування за умовчанням (див. locale.getpreferredencoding() ). Щоб декодувати файл за допомогою іншого кодування, використовуйте аргумент encoding для open:
import
csv
with
open('some.csv',
newline='',
encoding='utf-8')
as
f:
reader
=
csv.reader(f)
for
row
in
reader:
print(row)
Те ж саме стосується запису в відмінному від системного кодування за умовчанням: вкажіть аргумент encoding під час відкриття вихідного файлу.
Реєстрація нового діалекту:
import
csv
csv.register_dialect('unixpwd',
delimiter=':',
quoting=csv.QUOTE_NONE)
with
open('passwd',
newline='')
as
f:
reader
=
csv.reader(f,
'unixpwd')
Трохи більш просунуте використання читача — той, хто ловить і повідомляє про помилки:
import
csv,
sys
filename
=
'some.csv'
with
open(filename,
newline='')
as
f:
reader
=
csv.reader(f)
try:
for
row
in
reader:
print(row)
except
csv.Error
as
e:
sys.exit('file
<>, line
<>:
<>'.format(filename,
reader.line_num,
e))
І в той час як модуль безпосередньо не підтримує парсингу рядків, він може легко це зробити:
import
csv
for
row
in
csv.reader(['one,two,three']):
print(row)
| [1] | (1, 2) Якщо newline='' не буде визначено, то символ нового рядка вбудований у загартовані поля не інтерпретуватиметься правильно і на платформах, які використовують \r\n для запису закінчення стік буде додано додатковий \r . Завжди має бути безпечно вказати newline='' , оскільки модуль csv виконує власну (універсальну) обробку нового рядка. |
📥 Як завантажити файл csv в Пітон: докладна інструкція та приклади коду
Як завантажити файл CSV у Python? Для завантаження файлу CSV у Python можна використовувати модуль pandas. Ось простий приклад коду:
import pandas as pd # Завантажуємо файл CSV data = pd.read_csv('ім'я_файлу.csv') # Виводимо дані print(data)
У цьому прикладі ми імпортуємо модуль pandas та використовуємо функцію read_csv() для завантаження файлу. Потім ми зберігаємо дані змінну data і виводимо їх з допомогою функції print() . Не забудьте вказати правильне ім'я файлу замість имя_файла.csv .
Детальна відповідь
Як завантажити файл CSV в Пітон
Привіт і ласкаво просимо! У цій статті ми розглянемо, як завантажити файл CSV у Python. Формат CSV (Comma-Separated Values) є одним із найбільш поширених та зручних способів представлення табличних даних. Давайте розглянемо кілька способів розв'язання цієї задачі. Використання вбудованої бібліотеки CSV Одним із найпростіших способів завантажити файл CSV у Python є використання вбудованої бібліотеки csv. Давайте подивимося, як це зробити:
import csv with open('file.csv', 'r') як файл: reader = csv.reader(file) for row in reader: print(row)
У цьому прикладі ми використовуємо функцію open для відкриття файлу CSV з ім'ям file.csv. Потім ми створюємо об'єкт reader з модуля csv та ітеруємося по рядках файлу використовуючи цикл for. На кожній ітерації ми друкуємо рядок. Використання бібліотеки Pandas Ще один популярний спосіб завантаження файлів CSV у Python – використання бібліотеки Pandas. Ця бібліотека надає широкий набір інструментів для роботи з даними, включаючи можливість завантаження та аналізу файлів CSV. Ось приклад використання бібліотеки Pandas:
import pandas as pd data = pd.read_csv('file.csv') print(data)
У цьому прикладі ми імпортуємо бібліотеку Pandas під псевдонімом pd. Потім ми використовуємо функцію read_csv для завантаження файлу CSV з ім'ям file.csv. Результат зберігається у змінну data. Потім ми друкуємо вміст data. Використання бібліотеки NumPy Бібліотека NumPy також надає можливість завантаження файлів CSV та роботу з даними. Ось приклад використання бібліотеки NumPy:
import numpy as np data = np.genfromtxt('file.csv', delimiter=',') print(data)
У цьому прикладі ми імпортуємо бібліотеку NumPy під псевдонімом np. Потім ми використовуємо функцію genfromtxt для завантаження файлу CSV з ім'ям file.csv. Ми вказуємо роздільник як кому за допомогою параметра delimiter. Результат зберігається у змінну data. Потім ми друкуємо вміст data. Тепер у вас є кілька варіантів для завантаження CSV файлів в Python. Всі вони прості у використанні та надають різні можливості для роботи з даними. Виберіть той, який найбільше підходить для ваших потреб і почніть роботу з файлами CSV вже сьогодні!