我有一个带有名称和数字的两列CSV.有些人的名字使用逗号,例如,Joe Blow, CFA.这个逗号会破坏CSV格式,因为它被解释为新列.
我已经阅读过,最常见的处方似乎是用新值替换该字符或替换分隔符(例如this|that|the, other).
我真的想保留逗号分隔符(我知道excel支持其他分隔符,但其他解释器可能不支持).我也想把逗号放在名字里,Joe Blow| CFA看起来很傻.
有没有办法在不破坏格式的情况下在CSV列中包含逗号,例如通过转义它们?
Rya*_*yan 280
将该字段括在引号中,例如
field1_value,field2_value,"field 3,value",field4, etc...
Run Code Online (Sandbox Code Playgroud)
见维基百科.
更新:
要编码引号,请使用",字段中的单引号符号将被编码为"",整个字段将变为"""".因此,如果您在Excel中看到以下内容:
---------------------------------------
| regular_value |,,,"| ,"", |""" |"|
---------------------------------------
Run Code Online (Sandbox Code Playgroud)
CSV文件将包含:
regular_value,",,,""",","""",","""""""",""""
Run Code Online (Sandbox Code Playgroud)
逗号只是使用引号封装,因此,变为",".
逗号和引号需要封装和引用,因此","变为""",""".
mud*_*din 28
我发现某些应用程序(如 Mac 中的 Numbers)会忽略双引号,如果它前面有空格。
a, "b,c"工作时不起作用a,"b,c"。
Clo*_*oud 14
如果你想说,你可以使用引号.像这样的东西
$name = "Joe Blow, CFA.";
$arr[] = "\"".$name."\"";
Run Code Online (Sandbox Code Playgroud)
现在,您可以在名称变量中使用逗号.
Ahm*_*med 10
CSV 文件实际上可以使用不同的分隔符进行格式化,逗号只是默认分隔符。
您可以使用该sep标志来指定 CSV 文件所需的分隔符。
只需将该行添加sep=;为 CSV 文件中的第一行,即如果您希望分隔符为分号。您可以将其更改为任何其他字符。
除了其他答案中的要点之外:如果您在Excel中使用引号,则需要注意的一点是空格的位置.如果您有一行代码如下:
print '%s, "%s", "%s", "%s"' % (value_1, value_2, value_3, value_4)
Run Code Online (Sandbox Code Playgroud)
Excel会将初始引用视为文字引用,而不是使用它来转义逗号.您的代码需要更改为
print '%s,"%s","%s","%s"' % (value_1, value_2, value_3, value_4)
Run Code Online (Sandbox Code Playgroud)
正是这种微妙之处将我带到了这里.
这不是一个完美的解决方案,但您可以将所有使用的逗号替换为\xe2\x80\x9a或更小的引号。它看起来与逗号非常相似,并且在视觉上具有相同的目的。无需报价
在 JS 中这将是
\nstringVal.replaceAll(',', '\xe2\x80\x9a')\nRun Code Online (Sandbox Code Playgroud)\n不过,您需要非常小心需要直接比较数据的情况
\n| 归档时间: |
|
| 查看次数: |
298649 次 |
| 最近记录: |