Файли CSV (Comma Separated Values) є одним з найпоширеніших форматів даних у науці про дані, машинне навчання та аналітику. файлами CSV у Python, включаючи читання, запис та маніпулювання даними Також будуть розглянуті деякі. просунуті теми, такі як робота з великими файлами CSV, обробка відсутніх даних та виконання операцій над даними CSV з використанням бібліотек NumPy та Pandas. Для відкриття та читання файлу CSV у Python можна використовувати вбудований модуль csv. У цьому прикладі ми використовуємо функцію csv.reader() для читання вмісту CSV-файлу з ім'ям example.csv . У цьому прикладі ми використовуємо функцію csv.writer() для запису data у файл CSV з ім'ям example.csv . , щоб записати кожну row з data у файл. Використовуючи ці приклади коду, можна легко забезпечити читання CSV або завантаження CSV. Збереження даних у файлі CSV - звичайна задача в Python. Файли CSV легко читаються і можуть бути легко відкриті в будь-якому програмному забезпеченні для роботи з електронними таблицями.Ось кілька прикладів того, як зберегти файл CSV на Python. Цей приклад демонструє, як записати простий список значень файлу CSV. У наведеному вище коді: Цей приклад показує, як записати словник значень у файл CSV. У наведеному вище коді: Використовуючи модуль csv Python, ви можете легко зберегти свої дані в CSV-файл. Приклади можуть бути змінені, щоб відповідати конкретним вимогам. Конвертація json data у формат CSV є звичайним завданням при обробці data . В обох цих прикладах ми завантажуємо дані JSON з файлу, перетворюємо їх на об'єкт Python, а потім записуємо у файл CSV з використанням модуля csv або бібліотеки pandas. Pandas - це потужна бібліотека для аналізу даних з відкритим вихідним кодом для Python, яка пропонує прості у використанні структури даних для маніпуляції та аналізу даних. Для завантаження файлу CSV з Pandas ми використовуємо read_csv() . Після завантаження CSV-файлу нам потрібно розібрати дані, щоб отримати необхідну інформацію. Після обробки даних CSV ми можемо захотіти записати новий DataFrame у новий CSV-файл. Експорт data в CSV (значення, розділені комами), є звичайним завданням при обробці data . Модуль csv - це вбудований модуль Python, який дозволяє читати і записувати файли CSV. Ось приклад експорту pandas DataFrame у файл CSV. Цей код створює CSV-файл з таким же форматом, як у попередньому прикладі. Для рядкового читання файлу CSV в Python ми можемо використовувати вбудований модуль csv . У наведеному вище прикладі ми відкриваємо файл CSV example.csv і присвоюємо його змінною csvfile . У наведеному вище прикладі ми відкриваємо CSV файл example.csv в режимі додавання (append) і присвоюємо його змінною csvfile. Потім ми створюємо об'єкт csv.writer , який ми можемо використовувати для запису нового рядка в файл CSV за допомогою методу writerow() . Змінна row - це список значень для запису нового рядка в CSV файлі. Використовуючи ці прості приклади, ми можемо легко читати та записувати в CSV файли рядково на Python. Щоб прочитати один стовпець CSV на Python, можна використовувати функцію csv.DictReader() для читання CSV файлів у вигляді словників. Ось два приклади: У цьому прикладі коду ми спочатку import модуль csv. Потім ми використовуємо оператор with для відкриття CSV файлу example.csv. Створюємо об'єкт DictReader під назвою reader, використовуючи файл CSV file. Потім ми итерируем через кожну row в reader і print значення column_name у кожному рядку. У цьому прикладі коду ми спочатку import модуль pandas і створюємо DataFrame з назвою data, використовуючи функцію read_csv() і передаючи ім'я файлу CSV example.csv. Потім ми надаємо дані в column_name нової змінної column_data . Наприкінці ми print column_data . Ви можете зробити свій внесок у статті про Python на GitHub: створіть Fork, внесіть правки та надішліть нам Pull request. Так званий формат 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 (у цьому випадку поля без лапок перетворюються на числа з плаваючою точкою). Короткий приклад використання: Повертає об'єкт writer, що відповідає за перетворення даних користувача з окремими рядками в наданий файлоподібний об'єкт. csvfile може бути будь-яким об'єктом з методом write(). Якщо csvfile є файловим об'єктом, його слід відкрити за допомогою newline = ''[1]. Додатковий параметр dialect використовується визначення ряду параметрів, характерних для специфічного CSV діалекту. Це може бути сутність підкласу класу Dialect або одним із рядків, що повертається функцією list_dialects() . Також можуть надсилатися інші додаткові ключові аргументи fmtparams для визначення окремих параметрів форматування в поточному діалекті. Докладніші відомості про параметри діалекту та форматування див.у розділі Діалекти та параметри форматування. Для максимально простої взаємодії з модулями, що реалізують DB API, значення None записується як порожній рядок. У той час як це незворотне перетворення, але воно допомагає зробити простіше SQL дамп із NULL даними в CSV файли без попередньої обробки даних, що повертаються викликом cursor.fetch*. Усі інші нерядкові дані перед записом стрингифікуються функцією str() . Короткий приклад використання: Зв'язування 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 . Короткий приклад використання: Створює об'єкт, який працює як звичайний літер, але відображає словники на вихідні рядки. Параметр fieldnames - це послідовність ключів, що ідентифікують порядок, в якому значення словника, передані методом writerow() записуються у файл f. Необов'язковий параметр restval вказує значення для запису, якщо у словнику відсутній ключ fieldnames. Якщо словник, переданий методом writerow() , містить ключ, не знайдений у fieldnames, необов'язковий параметр extrasaction показує, яку дію необхідно вжити. Якщо встановлено значення 'raise' (за замовчуванням), піднімається виняток ValueError . Якщо встановлено значення 'ignore', додаткові значення у словнику ігноруються. Будь-які інші необов'язкові чи ключові аргументи передаються в базову суть writer. Зверніть увагу, що на відміну від класу DictReader , параметр fieldnames класу DictWriter не є опціональним. Короткий приклад використання: 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 , якщо перу рядок, здається, стоком заголовків колонки. Модуль CSV визначає наступні константи: Наказує writer об'єктам закочувати всі поля. Наказує writer об'єктам закочувати тільки ті поля, які містять спеціальні символи, такі як delimiter, quotechar або будь-який із символів у lineterminator. Наказує writer об'єктам залагодити всі нечислові поля. Дає вказівку reader перетворювати всі незакуті поля на тип float. Наказує writer об'єктам ніколи не закочувати поля. Коли поточний delimiter з'явиться у вихідних даних, йому передує поточний символ escapechar. Якщо escapechar не буде встановлено, то writer підніме Error, якщо зіткнеться з будь-якими символами, які вимагають екранування. Дає вказівку reader не виконувати спеціальну обробку символів цитати. Модуль CSV визначає наступний виняток: exception csv. Error ¶ Піднімається будь-якою функцією для виявлення помилки. Для спрощення завдання формату вхідних та вихідних записів конкретні параметри форматування групуються в діалекти. Діалект - це підклас Dialect класу, що має набір специфічних методів та єдиний validate() метод. Створюючи об'єкти reader або writer, програміст може визначити рядок або підклас класу Dialect як параметр діалекту. На додаток або замість параметра dialect, програміст може також визначити окремі параметри форматування, які мають самі імена як атрибути, визначений нижче для класу Dialect . Діалекти підтримують такі атрибути: Односимвольний рядок, який використовується для відділення полів. За промовчанням ',' . Керує тим, як сутності quotechar, що з'являються всередині поля, повинні самостійно скуштувати. Коли True символ подвоюється. Коли False , escapechar - використовується як префікс до quotechar. За умовчанням він True. При виведенні, якщо doublequote False та не встановлений escapechar, піднімається Error , якщо quotechar знайдений у полі. Односимвольний рядок використовується writer, щоб екранувати delimiter, якщо quoting встановлений у QUOTE_NONE та quotechar, якщо doublequote - False. При читанні escapechar видаляє особливе значення з наступного символу. За замовчуванням використовується значення None, яке вимикає екранування. Використовуваний рядок, що використовується для завершення рядка, зроблений writer . За замовчуванням використовується значення '\r\n'. У reader жорстко закодовані розпізнавальні символи '\r' або '\n' як кінець рядка та ігнорує lineterminator. Ця поведінка може змінитися у майбутньому. Одиносимвольний рядок, що використовується для загвинчування полів, що містять спеціальні символи, такі як delimiter або quotechar, або які містять символи нового рядка. За промовчанням використовується значення ''' . Контролює, коли лапки повинні генеруватися writer і розпізнавати reader. Він може приймати будь-які константи QUOTE_* (див. розділ ) і за умовчанням має значення QUOTE_MINIMAL . При True , прогалини безпосередньо наступні за delimiterігноруються. Значення за замовчуванням - False. Коли True піднімає виняток Error на поганому вхідному CSV. За замовчуванням - False. Об'єкти Reader ( DictReader сутності та об'єкти, що повертаються функцією reader() ) містять такі публічні методи: Повертає наступний рядок ітерабельного об'єкта reader у вигляді списку (якщо об'єкт повернуто з reader() ) або dict (якщо це екземпляр DictReader ), що розпарюється відповідно до поточного діалекту. Зазвичай ви повинні викликати його як next (reader). Об'єкти Reader містять такі публічні атрибути: Опис діалекту лише для читання, який використовує парсер. Кількість стік читаних з джерела, що ітерується. Це не те саме, що і кількість записів, що повертаються, оскільки записи можуть охопити кілька рядків. Об'єкти DictReader мають наступний публічний атрибут: Якщо не передано як параметр, створюваний об'єкт, то цей атрибут ініціалізується при першому доступі або при читанні першого запису з файлу. У об'єктів 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 файлу: Читання файлу з альтернативним форматом: Відповідаю найпростіший приклад запису: Оскільки open() використовується для відкриття CSV файлу для читання, файл буде за замовчуванням декодований в юнікоді використовуючи системне кодування за умовчанням (див. locale.getpreferredencoding() ). Щоб декодувати файл за допомогою іншого кодування, використовуйте аргумент encoding для open: Те ж саме стосується запису в відмінному від системного кодування за замовчуванням: вкажіть аргумент encoding при відкритті вихідного файлу. Реєстрація нового діалекту: Трохи більш просунуте використання читача — той, хто ловить і повідомляє про помилки: І в той час як модуль безпосередньо не підтримує парсингу рядків, то він може легко це зробити.Обробка файлів CSV
Відкриття Файлу CSV та Читання Даних з Допомога Python
import csv with open('example.csv', 'r') як файл: reader = csv.reader(file) for row in reader: print(row)
import csv with open('example.csv', 'w', newline='') як файл: writer = csv.writer(file) writer.writerow(['Name', 'Age', 'Gender']) writer .writerow(['John', '25', 'Male']) writer.writerow(['Jane', '30', 'Female'])
Як зберегти в файл CSV на Python
import csv # Example data data = [['Name', 'Age', 'Gender'], ['Alice', '25', 'Female'], ['Bob', '30', 'Male'], ['Charlie', '35', 'Male']] # Open csv файл в режимі написання з Open('example.csv', mode='w') як файл: writer = csv.writer(file) # Write data to csv file writer.writerows(data)
import csv # Example data data = [, , ] # Open csv файл у режимі написання з Open('example.csv', mode='w', newline='') as file: fieldnames = ['Name', 'Age ', 'Gender'] writer = csv.DictWriter(file, fieldnames=fieldnames) writer.writeheader() # Write data to csv файл для запису в data: writer.writerow(item)
Як конвертувати JSON в CSV з Допомога Python
Використання модулів JSON та CSV
import json import csv # Load JSON data with open('data.json', 'r') як файл: data = json.load(file) # Open CSV file for writing with open('data.csv', 'w' , newline='') as file: writer = csv.writer(file) # Write header row writer.writerow(data[0].keys()) # Write data rows for item in data: writer.writerow(item.values())
Використання Бібліотеки Pandas
import pandas as pd # Load JSON data with open('data.json', 'r') як файл: data = json.load(file) # Convert to dataframe df = pd.DataFrame(data) # Write to CSV file df .to_csv('data.csv', index=False)
Читання CSV за допомогою Pandas
Завантаження CSV за допомогою Pandas
import pandas as pd df = pd.read_csv('filename.csv') print(df.head())
Розбір Csv-файлу з Допомога Pandas
import pandas as pd df = pd.read_csv('filename.csv') df = df[df['column_name'] == 'required_value'] print(df.head())
Запис Dataframe у CSV з Використанням Pandas
import pandas as pd df = pd.read_csv('filename.csv') # Perform operations extract the required data new_df = df[df['column_name'] == 'required_value'] # Write the new DataFrame to a new CSV file new_df.to_csv('new_file.csv', index=False)
Експорт у CSV
Використання Модуля CSV
import csv data = with open('data.csv', 'w', newline='') як файл: writer = csv.writer(file) writer.writerow(data.keys()) writer.writerows(zip(* data.values())) # Цей код створить CSV файл з наступним форматом: # # # name,age # John, 20 # Jane, 25 # Adam, 30
Використання Модуля Pandas
import pandas як pd data = df = pd.DataFrame(data) df.to_csv('data.csv', index=False)
Читання CSV Файлу Построчно
Порядкове Читання CSV Файлу
import csv with open('example.csv', newline='') як csvfile: reader = csv.reader(csvfile) for row in reader: print(row)
Запис у Новий Рядок у CSV
import csv with open('example.csv', mode='a', newline='') як csvfile: writer = csv.writer(csvfile) row = ['value1', 'value2', 'value3'] writer. writerow(row)
Як Прочитати Один Стовпець CSV на Python
import csv with open('example.csv') as file: reader = csv.
import pandas as pd data = pd.read_csv('example.csv') column_data = data['column_name'] print(column_data)
Пишіть разом із нами!
csv — Читання та запис CSV файлів¶
Зміст модуля¶
>>>
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
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'])
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'>)
with
open('example.csv',
newline='')
as
csvfile:
dialect
=
csv.Sniffer().sniff(csvfile.read(1024))
csvfile.seek(0)
reader
=
csv.reader(csvfile,
dialect)
#. обробка CSV файлу міститься тут.
Діалекти та параметри форматування¶
Об'єкти Reader¶
Writer об'єкти¶
Приклади¶
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)
import
csv
with
open('some.csv',
newline='',
encoding='utf-8')
as
f:
reader
=
csv.reader(f)
for
row
in
reader:
print(row)
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 виконує власну (універсальну) обробку нового рядка.