【问题标题】:Powershell .txt to CSV Formatting IrregularitiesPowershell .txt 到 CSV 格式不规则
【发布时间】:2018-10-23 15:07:51
【问题描述】:

我有大量的.txt 文件从 pdf 中提取并使用逗号分隔符进行格式化。

我正在尝试将这些文本文件彼此附加,并在每个文件之间添加一个新行。在格式化过程的早期,我采用多行输入并将其格式化为一行,条目以逗号分隔。

然而,当在csv 中将一个 txt 文件附加到另一个文件时,会返回先前带有许多换行符的格式。所以我的最终输出是有效的csv,但并不代表每个文本文件都是一行csv 条目。如何确保从 txt 到 csv 的转换保留 txt 文件的格式?

我使用了Export-CSVAdd-Content>> 运算符,结果相似。

总而言之,单个 .txt 文件具有以下格式:

,927,Dance like Misty"," shine like Lupita"," slay like Serena. speak like Viola"," fight like Rosa! ,United States ,16 - 65+

csv 文件中一起附加时变成以下内容:

,927
,Dance like Misty"," shine like Lupita"," slay like Serena. speak like Viola"," fight like Rosa!
,United States
,16 - 65+

数据是如何准备的:

删除新行

Foreach($f in $FILES){(Get-Content $f -Raw).Replace("`n","") | Set-Content $f -Force}

在每个 txt 文件的末尾添加一个新行

 foreach($f in $FILES){Add-Content -Path $f -value "`n" |Set-Content $f -Force}

尝试转换为 CSV,每行一个文本文件,带逗号分隔符:

cat $FILES | sc csv.csv

或者

 foreach($f in $FILES){import-csv $f -delimiter "," | export-csv $f}

或者

foreach($f in $FILES){ Export-Csv -InputObject $f -append -path "test.csv"}

返回csv,每个逗号分隔值在一个新行上,而不是每个 txt 文件作为一行。

【问题讨论】:

  • 别忘了问你的问题。
  • Merill 我认为我们需要更多信息。您能否向我们展示您用于从文本文件转换为连接的 CSV 的代码?请尝试提供minimal reproducible example 以获得最佳答案。
  • @Bill_Stewart -- 更新了附加信息:如何确保从 txt 到 csv 的转换保留 txt 文件的格式?
  • @briantist -- 已更新,谢谢!

标签: powershell csv export-to-csv


【解决方案1】:

通过意识到即使记事本没有显示换行符,仍然有隐藏的回车符,解决了这个问题。在将明显的一行 csv 文件加载到 Notepad++ 并切换“显示隐藏字符”时,这种疏忽很明显。

通过在转换为 CSV 之前同时替换 \r 和 \n 字符,

Foreach($f in $FILES){(Get-Content $f -Raw).Replace("\n","").Replace("\r","" | 
Set-Content $f -Force}

CSV 转换过程使用以下方法按计划进行

cat $FILES | sc final.csv

最终判决—— 似乎是单行条目的文本文件准备成为 CSV

,927,Dance like Misty"," shine like Lupita"," slay like Serena. speak like Viola"," fight like Rosa! ,United States ,16 - 65+

每个值之间仍有回车符。通过尝试另一个具有“显示隐藏字符”功能的文本编辑器,这一点很明显。

【讨论】:

  • 干得好!当我替换行尾时,我通常使用-replace 运算符(它采用正则表达式)而不是.Replace() 方法。然后我做-replace '\r?\n',这意味着“0 或 1 个回车后跟 1 个换行”;这可以在一次调用中同时捕获 Windows 和 Linux 行尾样式。链接.Replace() 方法也很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-04
  • 2022-10-15
  • 2020-10-13
  • 1970-01-01
  • 2020-04-04
  • 2014-03-08
  • 2013-03-13
相关资源
最近更新 更多