根据文件名将新的第一列添加到 CSV
Add new 1st column to CSV based on filename
我有一个包含 500 个 CSV 的文件夹,每个 CSV 应用程序有 80.000 行。我需要在第一列中添加日期(基于文件名)。
我从各种样本中提取的脚本几乎完成了它应该做的事情。它为文件夹中的每个文件创建一个新文件,在第一个位置有一个新列,名称正确 header 但此列中的所有行都是空的。
文件名示例:2020-03-31_xxxxxxxx.csv
如果有人能看看这个就好了。
$items = Get-ChildItem -Path "C:\Temp\Data\*.csv"
for ($i=0; $i -lt $items.Count; $i++)
{
$outfile = $items[$i].FullName + "out"
Import-Csv $items |
Select-Object @{Name='Date';Expression={Get-ChildItem -Name $items.Name.SubString(0,9)}},* |
Export-Csv -NoTypeInformation -delimiter ";” $outfile
}
同样在导出中应该是一个转换,因为 CSV 中没有“”,但我也无法添加它,而不会出错。
(ConvertTo-Csv -NoTypeInformation -delimiter ";”) | Foreach-Object { $_ -replace '"', '' } | Out-File $outfile
试试这个:
$items = Get-ChildItem -Path "C:\Temp\Data\*.csv"
for ($i=0; $i -lt $items.Count; $i++) {
$outfile = $items[$i].FullName + "out"
Import-Csv $items[$i] | Select-Object @{n='Date';e={$items[$i].Fullname.ToString().Split("_")[0]}},* | Export-Csv -NoTypeInformation -delimiter ";” -Force $outfile
}
您不是在选择日期,而是在获取每个文件的子项目信息。所以你得到了丑陋的 csv 格式。此外,您一次导入所有 csv,而不是一个。
感谢 Wasif Hasan,我最终得到了这段代码。
不需要删除引号,因为 CSV 中有文本字段,如果我尝试删除引号会中断:
$items = Get-ChildItem -Path "C:\Temp\Data\*.csv"
for ($i=0; $i -lt $items.Count; $i++) {
$outfile = $items[$i].FullName + "out"
$delimiter = ';'
Import-Csv $items[$i] -delimiter $delimiter | Select-Object @{n='Date';e=
{$items[$i].Basename.ToString().Split("_")[0]}},* | Export-Csv -
NoTypeInformation -delimiter $delimiter -Force $outfile
}
我有一个包含 500 个 CSV 的文件夹,每个 CSV 应用程序有 80.000 行。我需要在第一列中添加日期(基于文件名)。
我从各种样本中提取的脚本几乎完成了它应该做的事情。它为文件夹中的每个文件创建一个新文件,在第一个位置有一个新列,名称正确 header 但此列中的所有行都是空的。
文件名示例:2020-03-31_xxxxxxxx.csv
如果有人能看看这个就好了。
$items = Get-ChildItem -Path "C:\Temp\Data\*.csv"
for ($i=0; $i -lt $items.Count; $i++)
{
$outfile = $items[$i].FullName + "out"
Import-Csv $items |
Select-Object @{Name='Date';Expression={Get-ChildItem -Name $items.Name.SubString(0,9)}},* |
Export-Csv -NoTypeInformation -delimiter ";” $outfile
}
同样在导出中应该是一个转换,因为 CSV 中没有“”,但我也无法添加它,而不会出错。
(ConvertTo-Csv -NoTypeInformation -delimiter ";”) | Foreach-Object { $_ -replace '"', '' } | Out-File $outfile
试试这个:
$items = Get-ChildItem -Path "C:\Temp\Data\*.csv"
for ($i=0; $i -lt $items.Count; $i++) {
$outfile = $items[$i].FullName + "out"
Import-Csv $items[$i] | Select-Object @{n='Date';e={$items[$i].Fullname.ToString().Split("_")[0]}},* | Export-Csv -NoTypeInformation -delimiter ";” -Force $outfile
}
您不是在选择日期,而是在获取每个文件的子项目信息。所以你得到了丑陋的 csv 格式。此外,您一次导入所有 csv,而不是一个。
感谢 Wasif Hasan,我最终得到了这段代码。 不需要删除引号,因为 CSV 中有文本字段,如果我尝试删除引号会中断:
$items = Get-ChildItem -Path "C:\Temp\Data\*.csv"
for ($i=0; $i -lt $items.Count; $i++) {
$outfile = $items[$i].FullName + "out"
$delimiter = ';'
Import-Csv $items[$i] -delimiter $delimiter | Select-Object @{n='Date';e=
{$items[$i].Basename.ToString().Split("_")[0]}},* | Export-Csv -
NoTypeInformation -delimiter $delimiter -Force $outfile
}