Python 将数字转换为csv格式文件中的科学符号

Python 将数字转换为csv格式文件中的科学符号,python,bash,awk,sed,Python,Bash,Awk,Sed,我有一个csv文件,其标题包含每列的标题。我想把所有的数字转换成只有2位小数的科学记数法格式。i、 e.23452应转换为2.34e+04,0.00023452应转换为2.34e-04 但是,我希望第一列保持不变。其形式为文本编号,例如ABC\U 100。我不希望ABC_100转换为ABC_1e+2 简单地说,离开第一列和第一行,我希望所有内容都更改为2十进制科学格式 示例文件: 预期产出: 给你 awk -F, 'NR == 1 {print} NR > 1 { printf

我有一个csv文件,其标题包含每列的标题。我想把所有的数字转换成只有2位小数的科学记数法格式。i、 e.23452应转换为2.34e+04,0.00023452应转换为2.34e-04

但是,我希望第一列保持不变。其形式为文本编号,例如ABC\U 100。我不希望ABC_100转换为ABC_1e+2

简单地说,离开第一列和第一行,我希望所有内容都更改为2十进制科学格式

示例文件: 预期产出: 给你

awk -F, 'NR == 1 {print}
  NR > 1 {
    printf $1;
    for (ii = 2; ii <= NF; ii++){
      printf(",%1.2e", $ii)
    }
    print ""}' input.txt
awk-F,'NR==1{print}
NR>1{
印刷费1美元;
对于awk中的(ii=2;ii

$ awk '
BEGIN { FS=OFS="," }                # set field separators
{
    for(i=1;i<=NF;i++)              # iterate all fields
        if($i+0==$i)                # if $i is numeric
            $i=sprintf("%1.2e",$i)  # convert to scientific form
}
1' file                             # output
Name,ClassA,ClassB,ClassC
File_10,2.34e+03,2.12e-02,3.42e+01
File_50,4.32e+01,7.83e+03,2.40e-03
File_100,3.00e+02,2.40e-03,2.23e-05
$awk'
开始{FS=OFS=“,”}#设置字段分隔符
{

对于(i=1;i另一个awk,基于@JamesBrown答案(用于检测数字),使用GNU awk,无任何循环:

awk '
BEGIN{RS="[,\n]"}
$1+0==$1{$1=sprintf("%1.2e",$1)}
{printf "%s%s",$0,RT}' file

记录分隔符
RS
允许将每个数字捕捉为一条记录,因此避免使用任何循环。

请添加3-5行示例文本并完成预期输出,这将有助于测试解决方案……此外,请添加您遇到问题的代码。@Sundeep:我添加了一个小示例。我没有多少经验使用脚本语言,所以我现在没有任何代码。抱歉!!!抱歉,但您需要显示需要帮助的代码..标记Wiki(例如:)可以让你开始。也可以尝试在线搜索,例如:@Sundeep:肯定会通过awk文档了解它在csv文件上的工作。谢谢。你可能想在
sprintf(“%1.2e”,$i)中替换该
$i
使用
$1
即使它的计算结果为
$0
并且无论如何都有效。:dn如果
printf$X
,请始终使用
printf”%s“,$X
,因为如果
$X
包含
printf
格式字符,如
%s
,前者将失败。
$ awk '
BEGIN { FS=OFS="," }                # set field separators
{
    for(i=1;i<=NF;i++)              # iterate all fields
        if($i+0==$i)                # if $i is numeric
            $i=sprintf("%1.2e",$i)  # convert to scientific form
}
1' file                             # output
Name,ClassA,ClassB,ClassC
File_10,2.34e+03,2.12e-02,3.42e+01
File_50,4.32e+01,7.83e+03,2.40e-03
File_100,3.00e+02,2.40e-03,2.23e-05
awk '
BEGIN{RS="[,\n]"}
$1+0==$1{$1=sprintf("%1.2e",$1)}
{printf "%s%s",$0,RT}' file