删除某些列

时间:2014-02-24 12:10:20

标签: python separation-of-concerns

所以我有下面的文本文件显着。我希望删除第2列和第3列,并插入“!”在最后一列之前,在每一行中。我被告知我可能需要编写一个Python代码才能做到这一点,有没有人有一个更简单的解决方案。我看过以前的帖子,但我看不出文字和数字的组合。

 AR
 E + AR > AR + E                 0.00    0     1  AR-ELASTIC
 E + AR > AR* + E               11.60    0     2  AR > AR*
 E + AR > AR*** + E             11.60    0  2382  AR > AR***

所以我想要的输出就是这种情况:

 AR
 E + AR > AR + E                    1  !AR-ELASTIC
 E + AR > AR* + E                   2  !AR > AR*
 E + AR > AR*** + E              2382  !AR > AR***

2 个答案:

答案 0 :(得分:0)

注意事项:

  • 我认为你希望你的展望看起来像这样:

    AR
    E + AR > AR + E                     1     !AR-ELASTIC
    E + AR > AR* + E                    2     !AR > AR*
    E + AR > AR*** + E                  2382  !AR > AR***
    
  • 我认为它是由标签分隔的。

在python中:

import csv

with open('yourfile', 'rb') as fin, open('youroutput', 'wb) as fout:
    tsvin = csv.reader(fin, delimiter='\t')
    tsvout = csv.writer(fout, delimiter='\t')

    for row in tsvin:
        row_out = row[:1] + row[3:]
        row_out[-1] = '!{0}'.format(row_out[-1])
        tsvout.writerow(row_out)

您可以详细了解csv library here

当然,如果我的任何假设有误,这可能不符合您的需求,请用我们遗失的任何信息更新您的问题,我会根据需要更新/删除我的答案。

答案 1 :(得分:0)

与Ewan一样,您可以使用awk,这非常方便处理txt文件中的列:

$ cat toto
 AR
 E + AR > AR + E    0.00    0   1   AR-ELASTIC
 E + AR > AR* + E   11.60   0   2   AR > AR*
 E + AR > AR*** + E 11.60   0   2382    AR > AR***

awk -F"\t" '{if (NR==1) {printf $0} else {for (i=1;i<NF;i=i+1) {if(i!~2 && i!~3){printf $i"\t"} if (i==(NF-1)){printf "!"$NF }}}} {printf "\n"}' toto

其中:

  • NR是数字或记录,NR == 1 i第一行。
  • F是字段分隔符
  • NF是字段数

给出了:

 AR
 E + AR > AR + E    1   !AR-ELASTIC
 E + AR > AR* + E   2   !AR > AR*
 E + AR > AR*** + E 2382    !AR > AR***