¿Cómo leer un archivo CSV línea por línea en PowerShell?
Recientemente, uno de mis clientes me pidió que leyera los datos del archivo CSV y los almacenara en una lista de SharePoint usando PowerShell. Entonces, aquí te explicaré cómo leer un archivo CSV línea por línea en PowerShell con algunos ejemplos.
Para leer un archivo CSV línea por línea en PowerShell, puede usar el cmdlet Import-Csv combinado con un bucle foreach para procesar cada fila como un objeto. Para archivos más grandes, considere usar la clase .NET StreamReader para leer el archivo de manera más eficiente, manejando cada línea como una cadena y procesándola en consecuencia. Estos métodos le permiten manejar datos fila por fila, administrando el uso de la memoria de manera efectiva, especialmente con conjuntos de datos grandes.
Para este tutorial en particular, tomé un archivo CSV que tiene algunas columnas como:
- Índice
- ID de cliente
- Nombre de pila
- Apellido
- Empresa, etc
Así es como se ve el archivo CSV y si desea utilizar este archivo CSV de muestra, puede descargarlo.
Leer archivo CSV usando el cmdlet Import-Csv en PowerShell
En PowerShell, para leer archivos CSV, puede utilizar el cmdlet Import-Csv. Este cmdlet lee el archivo CSV y lo convierte en un objeto personalizado similar a una tabla donde cada columna se convierte en una propiedad del objeto. A continuación se muestra un ejemplo básico de cómo utilizar Import-Csv:
$csvData = Import-Csv -Path "C:\MyFolder\Customers.csv"
foreach ($line in $csvData) {
# Process each line here
Write-Host $line.'Customer Id', $line.'First Name'En este ejemplo, Id. de cliente y Nombre son los encabezados de las columnas del archivo CSV. El bucle foreach recorre cada línea del CSV como un objeto y puede acceder al valor de cada columna utilizando la sintaxis $line.ColumnName.
Puede ver el resultado en la siguiente captura de pantalla:
Leer CSV línea por línea en PowerShell
Si bien Import-Csv lee el CSV completo en la memoria en PowerShell, lo cual está bien para archivos pequeños, es posible que desees procesar cada línea individualmente, especialmente cuando se trata de archivos grandes. Para hacer esto, puede combinar Import-Csv con el cmdlet ForEach-Object como se muestra a continuación:
Import-Csv -Path "C:\MyFolder\Customers.csv" | ForEach-Object {
# Process each line here
Write-Host $_.'Customer Id' $_.'First Name'
}Aquí, $_ representa el objeto actual en la canalización, lo que le permite acceder a los datos de la columna de cada línea a medida que se procesan.
Aquí puede ver el resultado después de ejecutar el script de PowerShell usando el código VS.
Usando StreamReader para archivos grandes
Para archivos CSV muy grandes, Import-Csv puede no ser eficiente ya que carga el archivo completo en la memoria. En tales casos, puede utilizar la clase .NET StreamReader para leer el archivo línea por línea en PowerShell. Aquí está el guión completo.
$streamReader = [System.IO.StreamReader] "C:\MyFolder\Customers.csv"
while ($line = $streamReader.ReadLine()) {
# Skip the header line
if ($streamReader.BaseStream.Position -eq 0) {
continue
}
# Process the line here, splitting by comma for CSV fields
$fields = $line.Split(',')
Write-Host $fields[0] $fields[1]
}
$streamReader.Close()Este script abre el archivo CSV para leerlo y procesa cada línea, excluyendo el encabezado. Divide cada línea por comas para acceder a campos individuales.
Delimitadores personalizados y el cmdlet Import-Csv
A veces, los archivos CSV pueden utilizar delimitadores distintos de comas. El cmdlet Import-Csv de PowerShell puede manejar delimitadores personalizados utilizando el parámetro -Delimiter:
$csvData = Import-Csv -Path "C:\MyFolder\Customers.csv" -Delimiter ";"
foreach ($line in $csvData) {
# Process each line here
Write-Host $line.ColumnName1 $line.ColumnName2
}Reemplace ";" con el carácter delimitador apropiado utilizado en su archivo CSV.
Manejo de caracteres especiales y adjuntos
Los archivos CSV pueden contener caracteres especiales o espacios adjuntos, como comillas para manejar comas dentro de un campo. PowerShell los administra automáticamente cuando se utiliza Import-Csv:
$csvData = Import-Csv -Path "C:\MyFolder\Customers.csv"
foreach ($line in $csvData) {
# PowerShell handles fields with commas enclosed in quotes
Write-Host $line.ColumnName1 $line.ColumnName2
}Conclusión
En este tutorial de PowerShell, he explicado cómo leer un archivo csv línea por línea en PowerShell. La mejor manera de leer archivos CSV en PowerShell es utilizar el cmdlet Import-Csv.


