使用逗号分隔符将单个 CSV 列批量转换为多个
Posted
技术标签:
【中文标题】使用逗号分隔符将单个 CSV 列批量转换为多个【英文标题】:Batch single CSV column to multiple with comma delimiter 【发布时间】:2021-02-18 06:19:45 【问题描述】:我希望创建一个批处理脚本,该脚本使用批处理脚本将文本合并并转换为 Excel 中的列。 我设法合并了 CSV 文件,以便它们创建一个只有一个标题的 CSV。存储的数据以逗号分隔,但我无法使用逗号分隔符将包含整个字符串的单列拆分为多个列。例如 "a,b,c" 应该在同一行 "a b c" 上变成三列
希望有人能帮忙。
到目前为止我的代码:
ECHO Set working directory
pushd %~dp0
ECHO Deleting existing combined file
del combined.csv
setlocal ENABLEDELAYEDEXPANSION
REM set count to 1
set cnt=1
REM for each file that matches *.csv
for %%i in (*.csv) do (
REM if count is 1 it's the first time running
if !cnt!==1 (
REM echo ^"sep=,^" >> combined.csv
REM push the entire file complete with header into combined.csv - this will also create combined.csv
for /f "delims=" %%j in ('type "%%i"') do echo %%j >> combined.csv
REM otherwise, make sure we're not working with the combined file and
) else if %%i NEQ combined.csv (
REM push the file without the header into combined.csv
for /f "skip=1 delims=" %%j in ('type "%%i"') do echo %%j >> combined.csv
)
REM increment count by 1
set /a cnt+=1
)
PAUSE```
【问题讨论】:
Powershell 可以正确地为您替换分隔符。您可以通过简单地在循环中执行foreach
来完成完整的powershell。做一个文件就像:powershell "Import-Csv .\test.csv -Delimiter
, | Export-Csv -delimiter "t" .\temp.csv -NoTypeInformation"
或在 for 循环中将其合并到批处理文件中。for %%i in (*.csv) do powershell....
【参考方案1】:
你只需要使用字符串替换,例如前面的分隔符是空格字符,
@echo off
set "str=a b c"
echo %str%
set "str=%str: =,%"
echo %str%
输出将是:
a,b,c
你为什么做这个? Excel 现在已经支持空格字符分隔。只需更改文件扩展名即可。
【讨论】:
你应该考虑csv
的值也可能有空格,所以"John Smith" "Harry Johnson"
不会变成"John Smith","Harry Johnson"
而是"John,Smith","Harry, Johnson"
数据已经用逗号分隔,但是 Excel 没有将数据分隔成几列
@Dlaurs20 你可以阅读这篇文章,How to open CSV with Excel 或者你可以使用这个免费软件nirsoft.net/utils/csv_file_view.html
遗憾的是,Excel 的不同本地化对“csv”使用不同的分隔符。也许this is helpful?以上是关于使用逗号分隔符将单个 CSV 列批量转换为多个的主要内容,如果未能解决你的问题,请参考以下文章
如何将同时具有逗号和空格分隔符的 CSV 文件转换为只有空格分隔符的 csv
使用 Python 将多个字符串元素列表转换为单个元素以逗号分隔的列表