0

我有一个类似于以下内容的 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
4

2 回答 2

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]

以下代码,可以为您将所有数据写入一个新的:

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')
于 2013-10-26T18:39:25.003 回答
1

csv模块为您提供字符串;只需用 , 拆分比破折号上的列str.split(),并映射到int()

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

现在你有两个整数值来计算:

>>> example = '8-10'
>>> map(int, example.split('-', 1))
[8, 10]
于 2013-10-26T18:13:17.550 回答