如何在csv中将带连字符的权重转换为磅

时间:2013-10-26 18:10:59

标签: python python-2.7 csv append

我有一个类似于以下内容的csv:

示例数据

data,data,8-10,data,data
data,data,9-06,data,data
data,data,10-00,data,data
data,data,14-10,data,data
data,data,12-10,data,data
data,data,8-11,data,data
data,data,16-10,data,data
data,data,20-10,data,data
data,data,18-10,data,data

我需要用这个重量的两个部分进行打算,使其变成磅数。

例如对于第1行,我需要输出(8 * 14)+ 10.但是我不知道如何捕获此权重的两边以执行所述计算。

所需的输出:

data,data,8-10,data,data,122
data,data,9-06,data,data,132
data,data,10-00,data,data,140
data,data,14-10,data,data,206
data,data,12-10,data,data,178
data,data,8-11,data,data,123
data,data,16-10,data,data,234
data,data,20-10,data,data,290
data,data,18-10,data,data,262

2 个答案:

答案 0 :(得分:4)

使用csv库和列表推导,您可以获取数据:

import csv

with open('sample.csv') as f:
   c = [r for r in csv.reader(f, delimiter=',')]
    data = [
        item[0] * 14 + item[1] for item in
            [map(int, row[2].split('-', 1)) for row in c]
    ]

    print data

输出:

[122, 132, 140, 206, 178, 123, 234, 290, 262]

以下代码可以将所有数据写入新的for for:

import csv

with open('sample.csv') as f:
    with open('new_file.txt', 'w') as w:
        c = [r for r in csv.reader(f, delimiter=',')]
        data = [
            item[0] * 14 + item[1] for item in
                [map(int, row[2].split('-', 1)) for row in c]
        ]
        for line, d in zip(c, data):
            for l in line:
                w.writelines(str(l) + ',')
            w.writelines(str(d))
            w.writelines('\n')

答案 1 :(得分:1)

csv模块为您提供字符串;只需使用str.split()拆分短划线上的列,然后映射到int()

val1, val2 = map(int, row[2].split('-', 1))

现在您有两个要计算的整数值:

>>> example = '8-10'
>>> map(int, example.split('-', 1))
[8, 10]