Import-CSV: Импорт (чтение) данных из CSV файлов в PowerShell
Для чтения содержимого CSV файла можно использовать PowerShell командлет Import-CSV. После загрузки содержимого CSV файла, вы получаете объект PowerShell, в котором каждая колонка из CSV файла представляет собой отдельное свойство. В этой статье мы рассмотрим особенности использования командлета Import-CSV для чтения данных из CSV.
CSV файл представляет собой форму табличного представления данных. Итак, мы создали в Excel простейшую таблицы с данными пользователей в AD со следующей структурой: ADlogin, Email, Phone, Department
. Обратите внимание, что в первой строке таблицы указаны названия столбцов. В PowerShell эти названия будут доступны, как атрибуты объектов в массиве.
Наша задача – импортировать данный CSV файл в PowerShell и внести изменения в Active Directory для каждого логина пользователя из файла.
В предыдущей статье мы рассмотрели, как использовать командлет Export-CSV для выгрузки данных в CSV файлы.
Сохраните данный Excel файл как CSV файл с запятыми в качестве разделителей. Получится вот такой текстовый файл:
Для импорта CSV файла в PowerShell достаточно указать его имя (путь)
$ADUsers=Import-CSV -path C:\PS\my_ad_users.csv
Командлет Import-CSV конвертирует данные из CSV файла в массив PowerShell.
Теперь если вызвать переменную $ADUsers
, вы выведете содержимое вашего CSV файла. Командлет преобразовал содержимое файла в массив, а все значения из CSV файла были конвертированы в строки.
Список доступны свойств объекта можно вывести так:
$ADUsers|get-member
Как вы видите, в строках массива содержатся объекты типа
Можно вывести все значения из определенного столбца:
$ADusers.email
Или вы можете вывести только определенные свойства объектов:
$ADusers| select Email, Phone
Можно обратится напрямую к определенной строке в массиве. Чтобы получить значение 3 строки, выполните команду (нумерация начинается с 0):
$ADusers[2]
Чтобы внести изменения в атрибуты пользователей Active Directory, которые вы задали в вашем CSV файле нужно с помощью цикла ForEach перебрать все строки в массиве $ADUsers ( для внесения изменений мы используем командлет Set-ADUser из модуля AD PowerShell).
#перебор всех строк в массиве по одному
$ADUsers | ForEach-Object {
# В данном примере строка $_. означает, что мы обращаемся к текущей строке массива. Значение конкретного столбца из текущей строки можно получить, обратившись к нему по имени столбца. Например, чтобы вывести на экран значение ADLogin из текущей строки:
Write-host $_.AdLogin
# Ищем пользователя в AD по значению из столбца ADLogin и меняем значения в его атрибутах из оставшихся столбцов.
Set-ADUser -Identity $_.AdLogin -MobilePhone $_.Phone –Department $_.Department –EmailAddress $_.Email
Этот же скрипт можно представить в более компактном виде однострочника PowerShell:
Import-Csv C:\PS\my_ad_users. csv | foreach {Set-ADUser -Identity $_.AdLogin -MobilePhone $_.Phone –Department $_.Department –EmailAddress $_.Email}
В некоторых случаях при обработке элементов массива из CSV файла вам нужно добавить в массив дополнительный столбец. Например, вы хотите добавить в объект $ADUsers текущую дату:
$ADUsers | add-member -membertype NoteProperty -name Date -value (Get-Date -Format dd/MM/yyyy)
На сайте https://winitpro.ru/ описаны различные сценарии использования командлета Import-CSV для выполнения административных операций с большим количеством объектов:
- Экспорт содержимого ящиков Exchange в PST файлы по списку пользователей:
Import-CSV "C:\ps\user_to_export_pst.csv" | ForEach {New-MailboxExportRequest -Mailbox $_.username -FilePath $_.UNCPathtoPst
- Добавить пользователей в группу безопасности AD: I
mport-CSV .\users.csv -Header users | ForEach-Object {Add-AdGroupMember -Identity ‘TestADGroup’ -members $_. users}
- Выгрузить информацию о пользователях из AD:
Import-Csv c:\ps\usernsme_list.csv | ForEach {
Get-ADUser -identity $_.user -Properties Name, telephoneNumber |
Select Name, telephoneNumber |
Export-CSV c:\ps\export_ad_list.csv -Append -Encoding UTF8
}Или изменить атрибуты некоторых пользователей через Set-ADUser:
Import-Csv "C:\ps\modifyad_users.csv" | foreach {Set-ADUser -Identity $_.SamAccountName –Title $_.Title -MobilePhone $_.MobilePhone}
Обновить фотографию в AD по списку пользователей:
Import-Csv C:\PS\import.csv |%{Set-ADUser -Identity $_.AD_username -Replace @{thumbnailPhoto=([byte[]](Get-Content $_.Photo -Encoding byte))}}
- Массово создать учетных записи пользователей в Active Directory по списку из CSV файла.
Или аналогичный сценарий по добавлению пользователей в группу Azure AD:
Import-CSV "C:\PS\add_m365_members.csv" | ForEach-Object {
Add-UnifiedGroupLinks –Identity it_dept –LinkType Members –Links $_.member
}
Импорт и экспорт данных: CSV, копирование таблиц, бэкапы
Импорт CSV-файлов
Импорт данных из файла
Для импорта CSV-файлов есть графический интерфейс. В контекстном меню схемы, в которую вы хотите импортировать, выберите пункт Import From File… Затем выберите сам CSV-файл.
Откроется диалоговое окно импорта. В левой панели опишите формат: укажите разделитель, префиксы, уточните наличие и формат заголовков.
В правой части окна опишите таблицу, в которую запишутся данные. Нажмите Delete на столбце, если не хотите его импортировать. Если вы хотите импортировать данные в существующую таблицу, кликните на Import From File…, используя контекстное меню этой таблицы.
В файле данных могут быть ошибки. По умолчанию включен флажок Write error records to file (Записывать ошибки в файл). Процесс импорта не прервется, но создастся журнал с информацией о строках, которые записать не удалось.
Вставка CSV в редактор данных
Вставляйте данные из экселевских таблиц. В общем случае это означает вставку в CSV формате. В DataGrip можно настроить формат, в котором будут записаны данные в буфере обмена. Но IDE может определить его и автоматически: нажмите на шестеренку и выберите значение Paste format.
Редактор CSV
DataGrip умеет редактировать CSV-файлы как таблицы. Для этого выберите Edit As Table из контекстного меню.
Затем укажите разделитель, уточните формат заголовка и т.д. Есть предпросмотр.
Экспорт данных
Что и куда
Таблица
Таблицу можно экспортировать в:
— Файл. Контекстное меню таблицы → Dump data to file.
— Другую таблицу. Контекстное меню таблицы → Copy Table to (или нажать F5 на таблице) → Выбрать существующую таблицу.
— Новую таблицу в любой СУБД.
SQL-запрос
Запрос может быть экспортирован в файл, то есть результаты сразу запишутся на диск. Для этого вызовите контекстное меню на запросе, выберите Execute to file. Затем укажите формат экспорта. Это особенно полезно, если запрос медленный: для экспорта не нужно запускать его два раза.
Результат запроса
Результат можно экспортировать в:
— Файл. Кнопка экспорта → To
File.
— Буфер обмена. Кнопка экспорта → To Clipboard.
— Существующую таблицу. Кнопка копирования → Выберите таблицу.
Выделенную область данных
Выделенную область данных можно скопировать в буфер обмена: Ctrl+C или через контекстное меню Copy.
Форматы экспорта
Всякий раз, когда вы экспортируете в файл или буфер обмена, используется определенный формат экспорта. Часто это CSV, но можно использовать и другие, например: JSON, XML, HTML и Markdown. Выберите соответствующий формат в выпадающем списке на панели инструментов или создайте свой собственный.
SQL-запросы
Any table or result-set can be presented as a batch of INSERT
statements. Для этого выберите формат SQL Inserts в выпадающем списке. В некоторых случаях это самый быстрый способ перенести данные из одной таблицы в другую. Генератор кода умеет учитывать столбцы с автоинкрементом.
It can be also can be also presented as a batch of UPDATE
statements, which can help you to modify data.
CSV, TSV
There are two pre-built formats in the list: Comma Separated Values and Tab Separated Values. Вы можете создать свой формат с любым разделителем. For instance, it can be Confluence Wiki Markup.
HTML и XML
Один из форматов по умолчанию нельзя изменить: HTML table. Другие форматы описаны скриптами: HTML-Groovy.html.groovy, XML-Groovy.xml.groovy и т.д. Эти скрипты называются «экстракторами». Эти скрипты можно модифицировать.
JSON
Экстрактор JSON-Groovy.json.groovy экспортирует данные в формате JSON.
Создание собственных форматов
Для нетривиальных случаев можно писать свои экстракторы. CSV-Groovy.csv.groovy, HTML-Groove.html.groovy — это экстракторы, встроенные в DataGrip по умолчанию. В выпадающем списке выбора форматов/экстракторов выберите Go to scripts directory, чтобы открыть папку, в которой лежат экстракторы.
Экстракторы, то есть скрипты, можно писать на Groovy или JavaScript. Они расположены в Scratches and Consoles/Extensions/Database Tools and SQL/data/extractors. Изменяйте существующие экстракторы или добавляйте свои собственные.
Чтобы узнать больше о написании экстракторов, прочитайте эту статью.
Инструменты для бэкапа
DataGrip поддерживает работу с mysqldump и pg_dump. Чтобы создать копию базы, используйте пункт Dump with… из контекстного меню источника данных. Инструменты восстановления для MySQL и PostgreSQL тоже вызывайте из контекстного меню. Для PostgreSQL можно восстанавливать двумя утилитами: pg_dump или psql. Выберите нужную в диалоговом окне.
Import-Csv (Microsoft.PowerShell.Utility) — PowerShell | Microsoft Learn
- Справочник
- Модуль:
- Microsoft.PowerShell.Утилита
Создает табличные настраиваемые объекты из элементов в файле значений, разделенных символами (CSV).
Синтаксис
Import-Csv [[-Разделитель]] [-Путь] <Строка[]> [-Заголовок <Строка[]>] [-Кодировка <Кодировка>] [<Общие параметры>]
Импорт-CSV [[-Разделитель]] -LiteralPath <Строка[]> [-Заголовок <Строка[]>] [-Кодировка <Кодировка>] [ ]
Import-Csv [-Путь] <Строка[]> -Использовать культуру [-Заголовок <Строка[]>] [-Кодировка <Кодировка>] [ ]
Import-Csv -LiteralPath <Строка[]> -Использовать культуру [-Заголовок <Строка[]>] [-Кодировка <Кодировка>] [<Общие параметры>]
Описание
Командлет Import-Csv
создает табличные настраиваемые объекты из элементов в CSV-файлах. Каждый столбец
в файле CSV становится свойством пользовательского объекта, а элементы в строках становятся свойством
ценности. Import-Csv
работает с любым файлом CSV, включая файлы, созданные с помощью Export-Csv
Можно использовать параметры командлета Import-Csv
, чтобы указать строку заголовка столбца и элемент
разделитель или прямая Import-Csv
для использования разделителя списка для текущей культуры в качестве элемента
разделитель.
Вы также можете использовать командлеты ConvertTo-Csv
и ConvertFrom-Csv
для преобразования объектов в CSV
струны (и обратно). Эти командлеты аналогичны командлетам Export-CSV
и Import-Csv
, за исключением
что они не имеют дело с файлами.
Если запись строки заголовка в CSV-файле содержит пустое или нулевое значение, PowerShell вставляет значение по умолчанию. имя строки заголовка и отображает предупреждающее сообщение.
Начиная с PowerShell 6.0, Import-Csv
теперь поддерживает расширенный формат файла журнала W3C.
Примеры
Пример 1: Импорт объектов процесса
В этом примере показано, как экспортировать, а затем импортировать CSV-файл объектов процесса.
Процесс получения | Export-Csv -Путь .\Processes.csv
$P = Импорт-CSV-Путь .\Processes.csv
$П | Get-Member
Имя Типа: System.Management.Automation.PSCustomObject
Имя MemberType Определение
---- ---------- ----------
Метод Equals bool Equals (System.Object obj)
Метод GetHashCode int GetHashCode()
GetType Тип метода GetType()
Строка метода ToString ToString()
BasePriority NoteProperty string BasePriority=8
Строка Company NoteProperty Company=Microsoft Corporation
...
$П | Таблица форматов
Имя SI Обрабатывает VM WS PM NPM Путь
---- -- ------- -- -- -- --- ----
ApplicationFrameHost 4 407 2199293489152 15884288 15151104 23792 C:\WINDOWS\system32\ApplicationFrameHost.exe
...
wininit 0 157 21904288 4591616 1630208 10376
winlogon 4 233 2199125549056 7659520 2826240 10992 C:\WINDOWS\System32\WinLogon. exe
WinStore.App 4 846 873435136 33652736 26607616 55432 C:\Program Files\WindowsApps\Microsoft.WindowsStore_11712.1001.13.0_x64__8weky...
WmiPrvSE 0 201 21919392 8830976 3297280 10632 C:\WINDOWS\system32\wbem\wmiprvse.exe
WmiPrvSE 0 407 2199157727232 18509824 12922880 16624 C:\WINDOWS\system32\wbem\wmiprvse.exe
WUDFHost 0 834 2199310204928 51945472 87441408 24984 C:\Windows\System32\WUDFHost.exe
Командлет Get-Process
отправляет объекты процесса по конвейеру в Export-Csv 900 28 .
Командлет
Export-Csv
преобразует объекты процесса в строки CSV и сохраняет строки в
Файл процессов.csv. Командлет Import-Csv
импортирует строки CSV из файла Processes.csv.
Струны сохраняются в $P
переменная. Переменная $P
отправляется по конвейеру в Командлет Get-Member
, отображающий свойства импортированных строк CSV. Переменная $P
передается по конвейеру командлету Format-Table
и отображает объекты.
Пример 2. Укажите разделитель
В этом примере показано, как использовать параметр Delimiter командлета Import-Csv
.
Процесс получения | Export-Csv -Path .\Processes.csv -Delimiter : $P = Import-Csv -Путь .\Processes.csv -Разделитель: $П | Формат-Таблица
Командлет Get-Process
отправляет объекты процесса по конвейеру на Export-Csv
. Экспорт-CSV
Командлет преобразует объекты процесса в строки CSV и сохраняет строки в файле Processes.csv.
Параметр Delimiter используется для указания разделителя двоеточия. Командлет Import-Csv
импортирует
строки CSV из файла Processes.csv. Строки сохраняются в переменной $P
. К $P
переменная отправляется по конвейеру в 9Командлет 0027 Format-Table .
Пример 3. Укажите текущий язык и региональные параметры для разделителя
В этом примере показано, как использовать командлет Import-Csv
с параметром UseCulture .
(Get-Culture).TextInfo.ListSeparator Get-процесс | Export-Csv -Путь .\Processes.csv -UseCulture Import-Csv -Path .\Processes.csv -UseCulture
Командлет Get-Culture
использует вложенные свойства TextInfo и ListSeparator чтобы получить
разделитель списка по умолчанию для текущей культуры. Командлет Get-Process
отправляет объекты процесса вниз по
трубопровод к Export-Csv
. Командлет Export-Csv
преобразует объекты процессов в строки CSV и
сохраняет строки в файле Processes.csv. Параметр UseCulture использует текущую
разделитель списка по умолчанию для культуры. Командлет Import-Csv
импортирует строки CSV из
Файл процессов.csv.
Пример 4. Изменение имен свойств в импортированном объекте
В этом примере показано, как использовать параметр Header Import-Csv
для изменения имен
свойства полученного импортированного объекта.
Start-Job -ScriptBlock { Get-Process } | Export-Csv -Путь .\Jobs.csv -NoTypeInformation $Header = 'Состояние', 'Дополнительные данные', 'Сообщение о состоянии', 'Местоположение', 'Команда', 'Информация о состоянии', 'Завершено', 'InstanceId', 'Id', 'Имя', 'ChildJobs', 'BeginTime', 'EndTime', 'JobType', 'Output', «Ошибка», «Ход выполнения», «Подробная информация», «Отладка», «Предупреждение», «Информация» # Удалить заголовок по умолчанию из файла $A = Get-Content-Path .\Jobs.csv $A = $A[1..($A.Count - 1)] $А | Out-File -FilePath .\Jobs.csv $J = Import-Csv -Путь .\Jobs.csv -Заголовок $Заголовок $J Состояние: работает Дополнительные данные: правда Статус : Местоположение: локальный хост Команда: Получить-Процесс Информация о состоянии: работает Завершено: System.Threading.ManualResetEvent Идентификатор экземпляра: a259eb63-6824-4b97-a033-305108ae1c2e Идентификатор: 1 Имя: Работа1 Дочерние задания: System.Collections.Generic.List`1[System.Management.Automation. Job] Время начала : 20.12.2018 18:59:57 Время окончания : Тип задания: фоновое задание Вывод: System.Management.Automation.PSDataCollection`1[System.Management.Automation.PSObject] Ошибка: System.Management.Automation.PSDataCollection`1[System.Management.Automation.ErrorRecord] Ход выполнения: System.Management.Automation.PSDataCollection`1[System.Management.Automation.ProgressRecord] Verbose : System.Management.Automation.PSDataCollection`1[System.Management.Automation.VerboseRecord] Отладка: System.Management.Automation.PSDataCollection`1[System.Management.Automation.DebugRecord] Предупреждение: System.Management.Automation.PSDataCollection`1[System.Management.Automation.WarningRecord] Информация : System.Management.Automation.PSDataCollection`1[System.Management.Automation.InformationRecord]
Командлет Start-Job
запускает фоновое задание, которое запускает Get-Process
. Объект задания отправляется вниз
конвейер к командлету Export-Csv
и преобразован в строку CSV. NoTypeInformation Параметр удаляет заголовок информации о типе из выходных данных CSV и является необязательным в PowerShell v6 и
выше. Переменная $Header
содержит настраиваемый заголовок, который заменяет следующие значения по умолчанию: Хасморедата , JobStateInfo , PSBeginTime , PSEndTime и PSJobTypeName . $A
переменная использует командлет Get-Content
для получения строки CSV из файла Jobs.csv. $A
переменная используется для удаления заголовка по умолчанию из файла. Командлет Out-File
сохраняет новый
версия файла Jobs.csv в переменной $A
. Командлет Import-Csv
импортирует файл Jobs.csv.
и использует параметр заголовка для применения Переменная $Header
. Переменная $J
содержит
импортировал PSCustomObject и отображает объект в консоли PowerShell.
Пример 5. Создание настраиваемого объекта с помощью CSV-файла
В этом примере показано, как создать настраиваемый объект в PowerShell с помощью CSV-файла.
Get-Content-Путь .\Links.csv 113207,about_Aliases 113208, about_Arithmetic_Operators 113209, about_Arrays 113210, about_Assignment_Operators 113212, about_Automatic_Variables 113213,about_Break 113214, about_Command_Precedence 113215, about_Command_Syntax 144309,about_Comment_Based_Help 113216, about_CommonParameters 113217, about_Comparison_Operators 113218,информация_Продолжить 113219, about_Core_Commands 113220, about_Data_Section $A = Import-Csv -Path .\Links.csv -Header 'LinkID', 'TopicTitle' $А | Get-Member Имя Типа: System.Management.Automation.PSCustomObject Имя MemberType Определение ---- ---------- ---------- Метод Equals bool Equals (System.Object obj) Метод GetHashCode int GetHashCode() GetType Тип метода GetType() Строка метода ToString ToString() LinkID NoteProperty string LinkID=113207 TopicTitle NoteProperty string TopicTitle=about_Aliases $А | Where-Object -Property TopicTitle -Like '*псевдоним*' LinkID Название темы ------ ---------- 113207 about_Aliases
Чтобы создать файл Links. csv, используйте значения, показанные в выходных данных Get-Content
.
Командлет Get-Content
отображает файл Links.csv. Командлет Import-Csv
импортирует файл Links.csv.
файл. Параметр Header указывает имена свойств LinkId и TopicTitle .
объекты хранятся в переменной $A
. Командлет Get-Member
показывает имена свойств из Заголовок параметр. Командлет Where-Object
выбирает объекты со свойством TopicTitle .
который включает псевдоним .
Пример 6. Импорт CSV-файла, в котором отсутствует значение
В этом примере показано, как командлет Import-Csv
в PowerShell реагирует на строку заголовка в CSV-файле.
файл содержит нулевое или пустое значение. Import-Csv
заменяет отсутствующий заголовок именем по умолчанию.
строка, которая становится именем свойства объекта, который Import-Csv
возвращает.
Get-Content-Путь .\Projects.csv ProjectID,ProjectName,Завершено 13, инвентарь, Редмонд, правда 440,Дальний Восток,Правда 469, Маркетинг, Европа, Ложь Import-Csv -Путь .\Projects.csv ПРЕДУПРЕЖДЕНИЕ. Один или несколько заголовков не указаны. Имена по умолчанию, начинающиеся с «H», использовались в место отсутствующих заголовков. ProjectID ProjectName h2 Завершено --------- ----------- -- --------- 13 Инвентарь Редмонд Правда 440 Дальний Восток Правда 469 Маркетинговая Европа Ложь (Импорт-Csv-Путь .\Projects.csv).h2 ПРЕДУПРЕЖДЕНИЕ. Один или несколько заголовков не указаны. Имена по умолчанию, начинающиеся с «H», использовались в место отсутствующих заголовков. Редмонд Дальний Восток Европа
Чтобы создать файл Projects.csv, используйте значения, показанные в выходных данных Get-Content примера .
Командлет Get-Content
отображает файл Projects.csv. В строке заголовка отсутствует значение между ProjectName и Завершено . Командлет Import-Csv
импортирует файл Projects.csv и
отображает предупреждающее сообщение, поскольку h2 является именем заголовка по умолчанию. Команда (Import-Csv -Path .\Projects.csv).h2
получает h2 значений свойств и отображает предупреждение.
Параметры
-Разделитель
-Кодировка
-Заголовок
-LiteralPath
-Путь
-UseCulture
90 014 Входные данныеСтрока
Можно передать строку, содержащую путь к этому командлету.
Выходные данные
Объект
Этот командлет возвращает объекты, описанные в содержимом CSV-файла.
Примечания
PowerShell включает следующие псевдонимы для Import-Csv
:
- Все платформы:
-
ипксв
-
Поскольку импортированные объекты являются CSV-версиями типа объекта, они не распознаются и отформатированы с помощью записей форматирования типа PowerShell, которые форматируют версии объекта, отличные от CSV. тип.
Результатом выполнения команды Import-Csv
является набор строк, образующих пользовательский
объект. Каждая строка представляет собой отдельную строку, поэтому вы можете использовать Count свойство объекта для подсчета
строки таблицы. Столбцы — это свойства объекта, а элементы в строках — свойства.
ценности.
Строка заголовка столбца определяет количество столбцов и имена столбцов. Имена столбцов также имена свойств объектов. Первая строка интерпретируется как столбец заголовки, если вы не используете параметр Заголовок для указания заголовков столбцов. Если в какой-либо строке больше значений, чем строка заголовка, дополнительные значения игнорируются.
Если в строке заголовка столбца отсутствует значение или содержится нулевое или пустое значение, Import-Csv
использует H , за которым следует номер отсутствующего заголовка столбца и имя свойства.
В файле CSV каждый объект представлен списком значений свойств, разделенных символами. объект. Значения свойств преобразуются в строки с помощью метода ToString() класса
объекта, поэтому они представлены именем значения свойства. Экспорт-CSV
не экспортирует
методы объекта.
Import-Csv
также поддерживает формат расширенного журнала W3C. Строки, начинающиеся с #
, рассматриваются как
комментарии и игнорируются, если комментарий не начинается с #Fields:
и содержит список столбцов с разделителями
имена. В этом случае командлет использует эти имена столбцов. Это стандартный формат для Windows IIS.
и другие журналы веб-сервера. Для получения дополнительной информации см.
Расширенный формат файла журнала.
- ConvertFrom-Csv
- Преобразовать в CSV
- Экспорт-CSV
- Get-Культура
csv — Чтение и запись файлов CSV — Документация по Python 3.11.3
Исходный код: Lib/csv.py
Так называемый формат CSV (значения, разделенные запятыми) является наиболее распространенным форматом импорта и формат экспорта для электронных таблиц и баз данных. Формат CSV использовался для многих лет до попыток стандартизированного описания формата в RFC 4180 . Отсутствие четко определенного стандарта означает, что тонкие различия часто существуют в данных, производимых и потребляемых различными приложениями. Эти различия могут затруднить обработку CSV-файлов из нескольких источников. Тем не менее, хотя разделители и символы кавычек различаются, общий формат достаточно похожи, чтобы можно было написать один модуль, который может эффективно манипулировать такими данными, скрывая детали чтения и записи данные от программатора.
Модуль csv
реализует классы для чтения и записи табличных данных в CSV.
формат. Это позволяет программистам сказать: «Запишите эти данные в предпочтительном формате».
Excel» или «прочитать данные из этого файла, созданного Excel», без
зная точные детали формата CSV, используемого Excel. Программисты могут
также опишите форматы CSV, понятные другим приложениям, или определите их
собственные специализированные форматы CSV.
Считыватель модуля
и csv
записи
объектов чтение и
писать последовательности. Программисты также могут читать и записывать данные в словарной форме.
используя классы DictReader
и DictWriter
.
См. также
- PEP 305 — CSV File API
Предложение по улучшению Python, в котором предлагалось это дополнение к Python.
Содержание модуля
Модуль csv
определяет следующие функции:
- csv.reader( csvfile , диалект='excel' , **fmtparams )
Вернуть объект чтения, который будет перебирать строки в заданном csvfile . csvfile может быть любым объектом, который поддерживает протокол итератора и возвращает string каждый раз, когда вызывается его метод
__next__()
— подходят как файловые объекты, так и объекты списка. Если csvfile является файловым объектом, он должен быть открыт с помощьюnewline=''
. 1 Дополнительный диалект параметр может быть задан, который используется для определения набора параметров характерные для конкретного диалекта CSV. Это может быть экземпляр подкласса классDialect
или одна из строк, возвращаемыхфункция list_dialects()
. Другие необязательные аргументы ключевого слова fmtparams может быть задан для переопределения отдельных параметров форматирования в текущем диалект. Полную информацию о диалекте и параметрах форматирования см. раздел Диалекты и параметры форматирования.Каждая строка, прочитанная из CSV-файла, возвращается в виде списка строк. Нет автоматическое преобразование типа данных выполняется, если только формат
QUOTE_NONNUMERIC
указана опция (в этом случае поля без кавычек преобразуются в числа с плавающей запятой).Краткий пример использования:
>>> импортировать csv >>> с open('eggs.csv', newline='') как csvfile: ... spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|') . .. для строки в программе чтения спама: ... печать (', '.join (строка)) Спам, Спам, Спам, Спам, Спам, Запеченная фасоль Спам, прекрасный спам, замечательный спам
- csv.writer( csvfile , диалект='excel' , **fmtparams )
Возвращает объект записи, ответственный за преобразование данных пользователя в разделители строки в заданном файлоподобном объекте. csvfile может быть любым объектом с
метод write()
. Если csvfile является файловым объектом, его следует открыть с помощьюnewline=''
1. Необязательный диалект может быть задан параметр, который используется для определения набора параметров, специфичных для определенный диалект CSV. Это может быть экземпляр подклассаКласс диалекта
или одна из строк, возвращенныхфункция list_dialects()
. Другие необязательные аргументы ключевого слова fmtparams может быть задан для переопределения отдельных параметров форматирования в текущем диалект. Полную информацию о диалектах и параметрах форматирования см. раздел Диалекты и параметры форматирования. Сделать это как можно проще взаимодействовать с модулями, которые реализуют DB API, значениеНет
записывается как пустая строка. Пока это не обратимое преобразование, упрощает вывод значений данных SQL NULL в CSV-файлы без предварительной обработки данных, возвращенных изcursor.fetch*
вызов. Все остальные нестроковые данные преобразуются в строки с помощьюstr()
перед записью.Краткий пример использования:
импорт CSV с open('eggs.csv', 'w', newline='') как csvfile: spamwriter = csv.writer (csvfile, разделитель = ' ', quotechar='|', quoting=csv.QUOTE_MINIMAL) spamwriter.writerow(['Спам'] * 5 + ['Запеченные бобы']) spamwriter.writerow(['Спам', 'Прекрасный спам', 'Чудесный спам'])
- csv.register_dialect( имя [ диалект [ **fmtparams ]])
Свяжите диалект с именем . имя должно быть строкой. диалект можно указать либо путем передачи подкласса
Dialect
, либо по fmtparams ключевых аргумента или и то, и другое, с переопределением ключевых аргументов параметры диалекта. Для получения полной информации о диалектах и форматировании параметры, см. раздел Диалекты и параметры форматирования.
- csv.unregister_dialect ( имя )
Удалите диалект, связанный с именем , из реестра диалектов. Ан
Ошибка
возникает, если имя не является зарегистрированным диалектным именем.
- csv.get_dialect( имя )
Вернуть диалект, связанный с именем . Ошибка
Диалект
.
- csv.list_dialects()
Вернуть названия всех зарегистрированных диалектов.
- csv.field_size_limit([ new_limit ])
Возвращает текущий максимальный размер поля, разрешенный синтаксическим анализатором. Если new_limit есть данный, это становится новым пределом.
Модуль csv
определяет следующие классы:
- класс csv.DictReader( f , fieldnames=None , restkey=None , restval=None , dialect='excel' , *args , **kwds )
Создайте объект, который работает как обычный ридер, но отображает информация в каждой строке к
dict
, чьи ключи даны необязательный имя поля параметр.Параметр fieldnames представляет собой последовательность. Если имен полей опущены, значения в первой строке файла f будет использоваться в качестве имена полей. Независимо от того, как определяются имена полей, словарь сохраняет их первоначальный порядок.
Если в строке больше полей, чем имен полей, оставшиеся данные помещаются в список и сохраняется с именем поля, указанным клавишей покоя (по умолчанию до
Нет
). Если в непустой строке меньше полей, чем имен полей, пропущенные значения заполняются значением restval (которое по умолчанию доНет
).Все остальные необязательные или ключевые аргументы передаются базовому
считыватель
экземпляр.Изменено в версии 3.6: возвращаемые строки теперь имеют тип
OrderedDict
.Изменено в версии 3.8: возвращаемые строки теперь имеют тип
dict
.Краткий пример использования:
>>> импортировать csv >>> с open('names.csv', newline='') как csvfile: ... читатель = csv.DictReader (csvfile) ... для строки в читателе: ... print(строка['first_name'], строка['last_name']) ... Эрик Айдл Джон Клиз >>> печать (строка) {'first_name': 'Джон', 'last_name': 'Клиз'}
- class csv. DictWriter( f , имена полей , restval='' , extrasaction='raise' , диалект='excel' , 9039 3 *args , **kwds )
Создайте объект, который работает как обычный писатель, но сопоставляет словари на выходные строки. Параметр fieldnames представляет собой
последовательность
ключей, определяющих порядок, в котором значения в словарь перешел наwriterow()
метод записывается в файл ф . Необязательный параметр restval указывает значение, пишется, если в словаре отсутствует ключ в именах полей . Если словарь, переданный методуwriterow()
, содержит ключ, не найденный в fieldnames , необязательный параметр extrasaction указывает, какое действие следует брать. Если установлено значение'raise'
, значение по умолчанию,ValueError
Поднялся. Если он установлен на'игнорировать'
, лишние значения в словаре игнорируются. Любые другие необязательные или ключевые аргументы передаются базовомуписатель
экземпляр.Обратите внимание, что в отличие от класса
DictReader
параметр fieldnames классаDictWriter
не является обязательным.Краткий пример использования:
импорт CSV с open('names.csv', 'w', newline='') как csvfile: имена полей = ['first_name', 'last_name'] писатель = csv.DictWriter (csvfile, имена полей = имена полей) писатель.writeheader() Writer.writerow({'first_name': 'Запеченный', 'last_name': 'Бобы'}) author.writerow({'first_name': 'Прекрасный', 'last_name': 'Спам'}) Writer.writerow({'first_name': 'Замечательно', 'last_name': 'Спам'})
- класс csv. Диалект
Класс
Dialect
— это класс-контейнер, атрибуты которого содержат информация о том, как обрабатывать двойные кавычки, пробелы, разделители и т. д. Из-за отсутствия строгой спецификации CSV различные приложения производят слегка отличающиеся данные CSV.Экземпляры диалекта
определяют, какчитатель
иписатель
ведут себя экземпляры.Все доступные имена
Диалект
возвращаются 9
- класс csv.excel
Класс
excel
определяет обычные свойства файла CSV, созданного в Excel файл. Он зарегистрирован с диалектным именем'excel'
.
- класс csv.excel_tab
Класс
excel_tab
определяет обычные свойства сгенерированного Excel Файл с разделителями TAB. Он зарегистрирован с диалектным именем'excel-tab'
.
- класс csv.unix_dialect
Класс
unix_dialect
определяет обычные свойства файла CSV генерируется в системах UNIX, т. е. с использованием'\n'
в качестве разделителя строки и заключения в кавычки все поля. Он зарегистрирован с именем диалекта'unix'
.Новое в версии 3.2.
- класс csv.Sniffer
Класс
Sniffer
используется для определения формата файла CSV.Класс
Sniffer
предоставляет два метода:- sniff( образец , разделители=Нет )
Проанализируйте данный образец и верните подкласс
Диалект
отражающие найденные параметры. Если необязательный параметр разделителей дан, он интерпретируется как строка, содержащая возможные допустимые символы-разделители.
Анализ образца текста (предположительно в формате CSV) и возврат
True
, если первая строка представляет собой серию заголовков столбцов. При проверке каждого столбца будет учитываться один из двух ключевых критериев. оценка, если образец содержит заголовок:Выбирается двадцать строк после первой строки; если больше половины столбцов + строки соответствуют критериям, возвращается
True
.
Примечание
Этот метод является грубой эвристикой и может давать как ложные срабатывания, так и негативы.
Пример для Sniffer
используйте:
с open('example.csv', newline='') как csvfile: диалект = csv.Sniffer().sniff(csvfile.read(1024)) csvfile.seek(0) читатель = csv.reader (csvfile, диалект) # ... обработать содержимое файла CSV здесь ...
Модуль csv
определяет следующие константы:
- csv.QUOTE_ALL
Инструктирует
записывающих объектов
заключать в кавычки все поля.
- csv.QUOTE_MINIMAL
Инструктирует
записывающих
объектов цитировать только те поля, которые содержат специальные символы, такие как разделитель , кавычки или любой из символов в терминатор строки .
- csv.QUOTE_NONNUMERIC
Инструктирует
записывающих объектов
заключать в кавычки все нечисловые поля.Указывает читателю преобразовать все поля без кавычек в тип float .
- csv.QUOTE_NONE
Инструктирует
записывающих
объектов никогда не заключать поля в кавычки. Когда текущий разделитель встречается в выходных данных, ему предшествует текущий управляющий символ характер. Если escapechar не установлен, модуль записи выдаст ошибкуError
, если встречаются любые символы, требующие экранирования.Указывает
считывателю
не выполнять специальную обработку символов кавычек.
Модуль csv
определяет следующее исключение:
- исключение CSV.Ошибка
Вызывается любой из функций при обнаружении ошибки.
Диалекты и параметры форматирования
Чтобы упростить задание формата входных и выходных записей,
параметры форматирования сгруппированы в диалекты. Диалект – это
подкласс класса Dialect
, имеющий набор специфических методов и
сингл метод проверки()
. При создании считывателя
или объектов записи
, программист может указать строку или подкласс
класс Dialect
в качестве параметра диалекта. В дополнение или вместо
параметра диалекта , программист также может указать индивидуальный
параметры форматирования, которые имеют те же имена, что и атрибуты, определенные ниже
для класса Диалект
.
Диалекты поддерживают следующие атрибуты:
- Диалект.разделитель
Односимвольная строка, используемая для разделения полей. По умолчанию это
','
.
- Диалект.двойная кавычка
Управляет тем, как экземпляры quotechar , появляющиеся внутри поля, должны себя цитировать. Когда
True
, символ удваивается. КогдаFalse
, escapechar используется в качестве префикса для кавычек . Это по умолчаниюTrue
.На выходе, если двойная кавычка равна
False
и не установлен управляющий символ ,Ошибка
возникает, если в поле найдена кавычка .
- Диалект.escapechar
Строка из одного символа, используемая модулем записи для выхода из разделителя , если цитирует устанавливается в
QUOTE_NONE
и кавычка , если двойная кавычкаЛожь
. При чтении escapechar удаляет любое специальное значение из следующий персонаж. По умолчанию этоNone
, что отключает экранирование.Изменено в версии 3.11: Пустой управляющий символ не допускается.
- Диалект.lineterminator
Строка, используемая для завершения строк, созданных модулем записи
'\r\n'
.Примечание
Считыватель
'\r'
или'\n'
как конец строки и игнорирует признак конца строки . Это поведение может измениться в будущее.
- Диалект. quotechar
Односимвольная строка, используемая для заключения в кавычки полей, содержащих специальные символы, например как разделитель или кавычек , или которые содержат символы новой строки. Это по умолчанию
'"'
.Изменено в версии 3.11: Пустая кавычка не допускается.
- Диалект.цитирование
Определяет, когда цитаты должны создаваться автором и распознаваться читатель. Он может принимать любую из констант
QUOTE_*
(см. раздел Module Contents) и по умолчаниюQUOTE_MINIMAL
.
- Диалект.skipinitialspace
Когда
True
, пробелы сразу после разделителя игнорируются. По умолчаниюЛожь
.
- Диалект.строгий
Когда
True
, возникает исключениеОшибка
при неправильном вводе CSV. По умолчаниюЛожь
.
Объекты чтения
объектов Reader ( DictReader
экземпляров и объектов, возвращенных функция reader()
) имеют следующие общедоступные методы:
- csvreader.__next__()
Вернуть следующую строку итерируемого объекта считывателя в виде списка (если объект был возвращен из
reader()
) или dict (если этоDictReader
экземпляр), проанализированный в соответствии с текущим диалектомnext(reader)
.
Объекты Reader имеют следующие общедоступные атрибуты:
- csvreader.dialect
Доступное только для чтения описание диалекта, используемого синтаксическим анализатором.
- csvreader.line_num
Количество строк, прочитанных из исходного итератора. Это не то же самое, что количество возвращаемых записей, так как записи могут занимать несколько строк.
Объекты DictReader имеют следующий общедоступный атрибут:
- DictReader.fieldnames
Если этот атрибут не передается в качестве параметра при создании объекта, этот атрибут инициализируется при первом доступе или при чтении первой записи из файл.
Объекты записи
Writer
объектов ( DictWriter
экземпляров и объектов, возвращенных
функция Writer()
) имеют следующие общедоступные методы. А строка должна быть
итерация строк или чисел для объектов Writer
и словарь
сопоставление имен полей со строками или числами (передавая их через str()
первый) для объектов DictWriter
. Обратите внимание, что комплексные числа записываются
в окружении скобок. Это может вызвать некоторые проблемы для других программ, которые
читать файлы CSV (при условии, что они вообще поддерживают комплексные числа).
- csvwriter.writerow( строка )
Напишите строка параметра файлового объекта записи, отформатированного в соответствии с к текущему диалекту
Изменено в версии 3.5: Добавлена поддержка произвольных итераций.
- csvwriter.writerows ( строки )
Записать все элементы в строки (итерация из строк объектов, как описано выше) в файловый объект писателя, отформатированный в соответствии с текущим диалект.
Объекты Writer имеют следующий общедоступный атрибут:
- csvwriter.dialect
Доступное только для чтения описание диалекта, используемого писателем.
Объекты DictWriter имеют следующий общедоступный метод:
Напишите строку с именами полей (как указано в конструкторе) в файловый объект писателя, отформатированный в соответствии с текущим диалектом. Возвращаться возвращаемое значение
csvwriter.writerow() 9Вызов 0028 используется для внутреннего использования.
Новое в версии 3. 2.
Изменено в версии 3.8:
writeheader()
теперь также возвращает значение, возвращаемое методcsvwriter.writerow()
, который он использует внутри.
Примеры
Самый простой пример чтения файла CSV:
импорт CSV с open('some.csv', newline='') как f: читатель = csv.reader(f) для строки в читателе: печать (строка)
Чтение файла в альтернативном формате:
импорт CSV с open('passwd', newline='') как f: читатель = csv.reader(f, delimiter=':', quoting=csv.QUOTE_NONE) для строки в читателе: печать (строка)
Соответствующий простейший пример написания:
импорт CSV с open('some.csv', 'w', newline='') как f: писатель = csv.writer (f) писатель.writerows (некоторый вариант)
Поскольку open()
используется для открытия файла CSV для чтения, файл
по умолчанию будет декодироваться в юникод с использованием системного значения по умолчанию
кодирование (см. locale.getencoding()
). Чтобы декодировать файл
используя другую кодировку, используйте аргумент encoding
для open:
импорт CSV с open('some.csv', newline='', encoding='utf-8') как f: читатель = csv.reader(f) для строки в читателе: печать (строка)
То же самое относится к записи в чем-либо, отличном от системного по умолчанию кодировка: укажите аргумент кодировки при открытии выходного файла.
Регистрация нового диалекта:
импорт CSV csv.register_dialect('unixpwd', delimiter=':', quoting=csv.QUOTE_NONE) с open('passwd', newline='') как f: читатель = csv.reader(f, 'unixpwd')
Чуть более продвинутое использование считывателя — отлов и сообщение об ошибках:
импорт CSV, sys имя файла = 'some.csv' с открытым (имя файла, новая строка = '') как f: читатель = csv.reader(f) пытаться: для строки в читателе: печать (строка) кроме csv.Error как e: sys.