我想在CSV文件的所有字段中添加引号。
我的CSV文件
ValueError: Error when checking target: expected dense_21 to have shape (512,) but got array with shape (1,)
预期产量
$ cat file.csv
1,563,45645,example-text,/example/path,FILE,ftp://,11
答案 0 :(得分:0)
有许多简单直接的方法可以按照您想要的方式格式化CSV文件。但是,如果您希望CSV文件符合RFC 1410,则必须多加注意。尤其是规则7:
如果使用双引号将字段括起来,则使用双引号 出现在字段中的内容必须通过在其前面加上另一个双引号来进行转义。例如:
"aaa","b""bb","ccc"
这提供了以下awk解决方案:
awk 'BEGIN{FS=OFS=","}
{
for(i=1;i<=NF;++i) {
gsub("\042","\042\042",$i)
sub("^\042\042","",$i)
sub("\042\042$","",$i)
$i="\042" $i "\042"
}
}1' file.csv
此外,如果您想遵守规则1:
每个记录位于单独的一行中,并由一行分隔 中断(
CRLF
)。例如:aaa,bbb,ccc CRLF zzz,yyy,xxx CRLF
awk 'BEGIN{FS=OFS=","; ORS="\r\n"}
{
sub("\r$","")
for(i=1;i<=NF;++i) {
gsub("\042","\042\042",$i)
sub("^\042\042","",$i)
sub("\042\042$","",$i)
$i="\042" $i "\042"
}
}1' file.csv
答案 1 :(得分:0)
尝试Perl
$ cat smc.txt
1,563,45645,example-text,/example/path,FILE,ftp://,11
$ perl -lpe ' s/([^,]+)/"$1"/g ' smc.txt
"1","563","45645","example-text","/example/path","FILE","ftp://","11"
$
或使用环视
$ perl -lne ' s/^|(?<=,)|(?=,)|$/"/g ; print ' smc.txt
"1","563","45645","example-text","/example/path","FILE","ftp://","11"
$
答案 2 :(得分:0)
尝试一下:
sed "s/,/\",\"/g;s/\(.*\)/\"\1\"/" file.csv
说明:
s/ # substitute
,/ # all ,
\",\" # with ","
/g # global on whole line
; # next expression
s/ # substitute
\(.*\)/ # save all into arg1 (\1)
\"\1\"/ # change to "\1"