所以我想在matplotlib.mlab中理解csv2rec的源文件。它用于获取csv文件并将数据解析为某些格式。所以它可能需要一个字符串'234'并将其转换为int。或者使用日期字符串并使其成为python日期时间。
def get_converters(reader):
converters = None
for i, row in enumerate(reader):
if i==0:
converters = [mybool]*len(row)
if checkrows and i>checkrows:
break
#print i, len(names), len(row)
#print 'converters', zip(converters, row)
for j, (name, item) in enumerate(zip(names, row)):
func = converterd.get(j)
if func is None:
func = converterd.get(name)
if func is None:
#if not item.strip(): continue
func = converters[j]
if len(item.strip()):
func = get_func(name, item, func)
else:
# how should we handle custom converters and defaults?
func = with_default_value(func, None)
converters[j] = func
return converters
我对此功能的问题是“转换器”。它以“无”开头。然后'func = converters [j]'j我知道是一个只是通过枚举创建的数字。所以它正在寻找由j索引的相应转换器项。但转换器中没有任何东西,因为它是没有权利的吗?除非python程序不必从上到下阅读?在这种情况下,我们从接下来的两行“if len(item.st .... etc)”或'else:'部分获取func。但是,我只是假设它必须从上到下阅读。
我不知道其他任何事情是否重要,所以我只包括整个功能。 converterd是一个字典映射我相信用户可以提供一个参数来自动查找转换器。 checkrows只是一个由用户提供的数字,作为开始时检查有效性的参数。它默认为None。我仍然是一个初学者,所以只是fyi。 =)
谢谢大家。这个网站非常有帮助!
答案 0 :(得分:2)
使用
在循环开始时再次设置转换器if i==0:
converters = [mybool]*len(row)
所以在那之后它不再是无。
答案 1 :(得分:1)
除非我遗漏了某些内容,否则在第一次迭代中“i”为0,因此执行以下操作:
converters = [mybool]*len(row)
并初始化“转换器”
答案 2 :(得分:1)
首先,
converters = None
设置converters
的初始值。这样,如果迭代没有发生(因为readers
可能为空),那么当函数返回converters
时,它将存在并具有值None
。
如果迭代超过readers
,那么converters
会在迭代的第一次传递中立即重置为更有意义的值(i==0
时):
converters = [mybool]*len(row)