【发布时间】:2013-11-22 08:11:32
【问题描述】:
我想用 python 读取一些包含行向量的 csv 文件。行向量的长度不同,因此某些字段为空且包含空字符串。将这样一个列表列表转换为一个 numpy 数组会产生一个字符串数组,并且在我将数组转换为浮点数的过程中(基于this question 的答案)我想出了两个看起来与我相同的解决方案,但是显然不是。也许有人可以用语言来表达差异。
解决方案 1:
def float_wrapper(reader):
for row in reader:
for val in row:
if (type(val) == str) and (len(val) == 0):
val = 0.0
yield float(val)
解决方案 2:
def str2float2(val):
if type(val) == str:
if len(val) == 0:
val = 0.0
return float(val)
def float_wrapper(reader):
for row in reader:
yield map(str2float2, row)
常用代码:
A = []
with open('parameters.csv', 'rb') as csvfile:
reader = csv.reader(csvfile, delimiter=',', quoting = csv.QUOTE_NONNUMERIC)
reader = float_wrapper(reader)
for row in reader:
A.append(row)
使用解决方案 1,A 是单个浮点列表,而使用解决方案 2,它是原始格式的列表列表。为什么是这样?我还可能缺少哪些其他替代方案?
【问题讨论】:
-
因为
map返回一个list&float返回一个float(不是容器) -
我希望能更详细地解释到底发生了什么以及幕后正在迭代什么。
-
thefourtheye 做了我想做的事 :)