使用Python,Perl,CSVfix在CSV文件中计算?

时间:2013-12-15 21:55:26

标签: python perl csv export-to-csv

我是解析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列它包含的值。关于我需要做一些计算。

0 个答案:

没有答案