Я написал простой скрипт PowerShell, который считывает данные из основного CSV-файла и анализирует столбец URL-адреса.
Затем он проверяет локальную файловую систему, чтобы проверить, существует ли двоичный файл (в данном случае это файл WAV или AIFF) в подкаталоге пути сценария root, и, если это так, добавляет мета-строку данные со столбцом «Локальный файл», добавленным в новый файл CSV.
Сценарий работает отлично и выполняется примерно за 10 секунд с основным файлом CSV, содержащим выборку из примерно 2000 строк. Тем не менее, клиент в Корее говорит, что сценарий замедляется и в конечном итоге истекает с помощью основного CSV, содержащего примерно 60000 строк.
Образец анализа CSV, который я анализирую, можно найти здесь .
Мне кажется, что это проблема с памятью, вызванная $NewCSVObject
, однако, так как это один из моих первых сценариев PS, это может быть просто плохое кодирование с моей стороны.
function Get-ScriptDirectory {
Split-Path -parent $PSCommandPath
}
function Resolve-Local-CSV {
Write-Host "Generating Local CSV File ... Please wait ..."
$currentPath = Get-ScriptDirectory
$csvfile = "$currentPath{0}media_local_master.csv" -f [IO.Path]::DirectorySeparatorChar
$masterCSV = Import-Csv "$csvfile" -header _id, active, track_title, Download_URL, artist_name, album_title, composer, duration, publisher, description, url_path, beats_per_minute, file_path_uncompressed, preview_url, genres, moods, styles, instruments, keywords, last_modified -delimiter ','
$NewCSVObject = @()
$masterCSV | ForEach-Object {
$downloadUrl = $_.Download_URL
if ($downloadUrl -ne 'Download_URL') {
$parsedurl = $downloadUrl.split("/")
$artist = $parsedurl[4]
$album = $parsedurl[5]
$track = $parsedurl[6]
$albumTarget = "$currentPath{0}media{0}$artist{0}$album{0}" -f [IO.Path]::DirectorySeparatorChar
$trackTarget = "$albumTarget$track"
If ((test-path $trackTarget)) {
$localfile = "media{0}$artist{0}$album{0}$track" -f [IO.Path]::DirectorySeparatorChar
$_ | Add-Member -MemberType NoteProperty -Name "Local_File" -Value $localfile
$NewCSVObject += $_
}
}
$newLocalMaster = "$currentPath{0}media_local_master_final.csv" -f [IO.Path]::DirectorySeparatorChar
$NewCSVObject | Export-Csv "$newLocalMaster" -notype
}
Write-Host "Finished Generating Local CSV File ..."
}
Resolve-Local-CSV