我不知道如何将多个.txt文件与数据合并成一个.csv文件,每个.txt文件分隔到列。
这是目前为止我的代码
$location = (Get-Location).Path
$files = Get-ChildItem $location -Filter "*.asd.txt"
$data = @()
foreach ($file in $files) {
$fileData = Get-Content $file.FullName
foreach ($line in $fileData) {
$lineData = $line -split "\t"
$data = $lineData[1]
Add-Content -Path "$location\output.csv" -Value $data
}
}
每个文件看起来都像
我想保留第一列“WaveLength”,并将文件夹中所有文件的第二列放在一起。标题将以确切名称“stovikmladyDoupno2 2020080500001.asd”或“stovikmladyDoupno2 2020080500002.asd”开头,依此类推...
所以它应该看起来像
我试着找了两天的信息,但还是不知道。我试着在文件的结尾加上“”,我想excel会处理这个问题,但没有任何帮助。
这里我提供了一些文件作为测试数据https://mega.nz/folder/zNhTzR4Z#rpc-BQdRfm3wxl87r9XUkw
几行数据
Wavelength stovikmladyDoupno2 2020080500000.asd
350 6.38961399706465E-02
351 6.14107911262903E-02
352 6.04866108251357E-02
353 5.83485359067184E-02
354 0.054978792413247
355 5.27014859356317E-02
356 5.34849237528764E-02
357 5.32841277775603E-02
358 5.23466655229364E-02
359 5.47595002186027E-02
360 5.22061034631109E-02
361 4.90149806042666E-02
362 4.81633530421385E-02
363 4.83974076557941E-02
364 4.65219929658367E-02
365 0.044800930294557
366 4.47830287392802E-02
367 4.46947539436297E-02
368 0.043756926558447
369 4.31725380363072E-02
370 4.36867609723618E-02
371 4.33227601805265E-02
372 4.29978664449687E-02
373 4.23860463187361E-02
374 4.12183604375401E-02
375 4.14306521081773E-02
376 4.11760903772502E-02
377 4.06421127128478E-02
378 4.09771489689262E-02
379 4.10083126746385E-02
380 4.05161601354181E-02
381 3.97904564387456E-02
3条答案
按热度按时间bxgwgixi1#
希望这有帮助!
我假设了一个位置,因为我不喜欢声明没有文本路径的文件路径。请根据需要调整路径。
myzjeezk2#
你要做的是一个相当困难的任务,有几种方法可以做到。这种方法要求所有的文件都在内存中来处理它们。你完全可以把这些文件当作TSVs,所以
Import-Csv -Delimiter "
t"`是一个选项,这样你就可以处理对象而不是纯文本。7nbnzgx93#
这里有一个更有效的方法,将文件作为纯文本处理,这个方法更快,内存效率更高,但不可靠。它使用
StreamReader
来读取文件内容 * 逐行 *,并使用StringBuilder
来构造每一行。