我有一個帶有4列的選項卡分隔文件。第2列和第3列有數字。基於前一列添加2列
我要總結第一列3項與第二柱2條目和代替第二柱2的打印,然後用在第二列3的地方第二列3條目和打印,且該結果該結果總和與第三欄第2欄輸入和第三欄第2欄打印,依此類推。預期的結果將是:
我有一個帶有4列的選項卡分隔文件。第2列和第3列有數字。基於前一列添加2列
我要總結第一列3項與第二柱2條目和代替第二柱2的打印,然後用在第二列3的地方第二列3條目和打印,且該結果該結果總和與第三欄第2欄輸入和第三欄第2欄打印,依此類推。預期的結果將是:
你沒問Tcl代碼,但這裏有一種方法可以實現。它可能更漂亮,但它的工作原理。
set data {
A1 1 2 a1
B1 3 4 b1
C1 5 6 c1
}
set ns {}
foreach {- a b -} $data {
lappend ns $a $b
}
set a 0
set xs 1
foreach n [lrange $ns 1 end] {
lappend xs [incr a $n]
}
foreach {a b} $xs r {a b c} {
puts "[string toupper $r]1\t$a\t$b\t${r}1"
}
謝謝彼得它也在工作...... :) – kashiff007
下面的Python的解決方案應該工作:
import csv
def convert(row):
for col in [1, 2]:
row[col] = int(row[col])
return row
with open('input.csv', 'rb') as f_input, open('output.csv', 'wb') as f_output:
csv_input = csv.reader(f_input, delimiter='\t')
csv_output = csv.writer(f_output, delimiter='\t')
last = convert(next(csv_input))
csv_output.writerow(last)
for cols in csv_input:
cols = convert(cols)
cols[1] = cols[1] + last[2]
cols[2] = cols[1] + cols[2]
csv_output.writerow(cols)
last = cols
給你一個output.csv
文件,如下所示:
A1 1 2 a1
B1 5 9 b1
C1 14 20 c1
非常感謝Martin。這是工作.... :)我相信這將幫助我傾斜Python。 – kashiff007
我投票關閉這一問題作爲題外話,因爲這不是一個代碼編寫服務 – jonrsharpe
你有沒有嘗試任何事情?此外,你用幾種語言標記了你的帖子,甚至沒有提及它們。我想你希望從他們中的一個獲得代碼,但是如果他們能夠看到你自己嘗試了某些東西,人們會幫助你。 – yolenoyer
我很抱歉,我不是一個編碼器。發佈這個問題,因爲這是在掙扎。如果你能提供幫助,我將不勝感激。 – kashiff007