我是解析CSV文件的新手。我在CSVfix工具的帮助下成功管理了我的csv文件中的一些修改:
我使用批处理脚本,这就是为什么我使用%Input%变量。
csvfix order -f 10,3,4,30,16,13,18,65,58,45,52,22,5,64 "%Input%" | csvfix order -skip "$10 == 'T' || $11 == 'T' || isempty($11) || $12 == 'HI' || $12 == 'HU' || $13 == '6' || $13 == '7' || $13 == '8' ||$13 == '9' || $13 == '12' || $13 == '15' || $13 == '16'" -f 1,2,3,4,5,6,7,8,9,10,11,12,13,14 | csvfix edit -e "s/10/27/" -e "s/6/5/" -f 4 | csvfix edit -e "s/1/F/" -e "s/2/T/" -e "s/^$/F/" -f 14 | csvfix order -f 1,2,3,4,5,6,7,8,9,13,14 | csvfix trim -o alma.csv
有了这个,我设法用不需要的数据删除不需要的列和行。 但现在我需要对新列进行计算并将其打印到csv文件。
csv文件有11列:
第一行是标题行。
PRICE_WithoutTAX TYPE
2868 20
339 20
235 20
333 28
6075 28
4196 20
2169 28
260 20
2916 20
我需要的是计算新列的价格:
关于范围和TYPE值,将有价格范围和不同的计算。
示例:
PRICE_WithoutTAX is column 8 = $8 and TYPE is column 13 = $13
if $8 < 5000 && $13 != '28' then $8 *0.65 / 0,5, v2 needs to be nothing to do
if $8 > 5000 && $8 < 10000 && $13 != '28 then $8 *0.65 / 0,6
if $8 > 10000 && $8 < 15000 && $13 != '28 then $8 *0.65 / 0,7
if $8 > 15000 && $8 < 20000 && $13 != '28 then $8 *0.65 / 0,8
等等
但我还需要控制当类型为28时我需要不同的计算和价格范围。所以
if $8 < 2000 && $13 == '28' then $8 *0.65 / 0,4, v2 needs to be nothing to do
if $8 > 2000 && $8 < 5000 && $13 == '28 then $8 *0.65 / 0,5
if $8 > 50000 && $8 < 10000 && $13 == '28 then $8 *0.65 / 0,6
if $8 > 10000 && $8 < 12000 && $13 == '28 then $8 *0.65 / 0,7
进行计算的最简单方法是什么。 我读过有人喜欢使用Text:CSV或使用Panda库的Python,也有一些使用Perl的建议。
有人能指出我正确的方向吗? :)
我有以下Python代码:
#!/usr/bin/python
import sys
import csv as csv
import numpy as np
filename = sys.argv[1]
readdata = csv.reader(open(filename, 'r'))
data = []
for row in readdata:
data.append(row)
header = data[0]
data.pop(0)
header.append("AR_VEGLEGES")
for i in range(len(data)):
if (float(data[i][7]) < 5000 and int(data[i][9]) == 28) :
diff = float(data[i][7]) - int(data[i][9])
elif (float(data[i][7]) >= 5000 and float(data[i][7]) >= 5000 and int(data[i][9]) == 28) :
diff = float(data[i][7]) - int(data[i][9])/2
data[i].append(diff)
print (data)
但我收到错误代码: 文件“csvchanger.py”,第22行,in if(float(data [i] [7])&lt; 5000和int(data [i] [9])== 28): IndexError:列表索引超出范围
CSV文件有11列。我需要控制第8列和第10列它包含的值。关于我需要做一些计算。