所以我有下面的文本文件显着。我希望删除第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***
答案 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
其中:
给出了:
AR
E + AR > AR + E 1 !AR-ELASTIC
E + AR > AR* + E 2 !AR > AR*
E + AR > AR*** + E 2382 !AR > AR***