【发布时间】:2017-03-23 10:33:40
【问题描述】:
假设我有一些数据存储为
"this is row -1 and column -1 with value", 12345
在 csv 文件中。 (不是实际上那样存储的,点是csv中的第一个值是一个包含必要坐标的字符串。)
我现在想提取这些值。我可以做一个for r in rows: ...,但我想用一个reduce来做。
import numpy as np
import scipy as sp
from functools import reduce
import csv
import re
def load(filename):
with open(filename,'r') as f:
rows = csv.reader(f)
next(rows) # skip header
coordi,coordj,values = reduce(
lambda aux,r: ([aux[0]+[i], aux[1]+[j], aux[2] + [int(r[1])]] for i,j in [int(d) for d in re.findall(r"\d+", r[0])]),
rows,
[[],[],[]]
)
return coordi, coordj, values
这会产生一个
TypeError: 'int' 对象不可迭代
自从
def load(filename):
with open(filename,'r') as f:
rows = csv.reader(f)
next(rows) # skip header
coordi,coordj,values = reduce(
lambda aux,r: ([aux[0]+[-1], aux[1]+[-1], aux[2] + [int(r[1])]]),
rows,
[[],[],[]]
)
return coordi, coordj, values
有效,我只能猜测i,j python 不满意。
我不知道为什么,因为
for r in rows:
i,j = [int(d) for d in re.findall(r"\d+", row[0])]
像魅力一样工作。
我该如何进行这项工作?
【问题讨论】:
标签: python mapreduce fold iterable-unpacking