我正在将XML字符串解析为CSV字符串,但是运行非常缓慢:
names.append("{} {}").format(players['firstName'], players['lastName'])
XML字符串有时会丢失几列,而我需要对其进行迭代以填充缺少的列-每行必须有92列。这就是为什么我有一些辅助功能来处理XML。
现在,我以4GB的Lambda值运行我的函数,但仍然超时:(
关于如何提高性能的任何想法?
答案 0 :(得分:0)
['y_{} class_{}'.format(idx,klass) for idx,forest in enumerate(multi_target_forest.estimators_) \
for klass in forest.classes_]
#output:
['y_0 class_0',
'y_0 class_1',
'y_0 class_2',
'y_0 class_3',
'y_1 class_0',
'y_1 class_1',
'y_1 class_2',
'y_1 class_3']
构造ElementTree Element实例,但是normalize_row_cells
只对每个实例的子代的text属性感兴趣,因此我考虑将get_cells_text
更改为仅返回文本。另外,它正在执行复制并调用normalize_row_cells
:将元素插入列表的中间可能会很昂贵,因为插入点之后的每个元素都必须移动。
类似的事情(未经测试的代码)可以避免进行复制和插入,而仅返回所需的文本,从而使list.insert
变得多余。
get_cells_text
如果您可以将单元格与其标头名称进行匹配,那么使用标准库中的csv.DictWriter可能会更好(您需要进行分析以确保安全)。
def normalize_row_cells(row):
cells = list(row)
updated_cells = []
pos = 1
for _ in range(0, 92):
elm = cells[pos - 1]
strIndexAttr = elm.get(INDEX_COLUMN)
index = int(strIndexAttr) if strIndexAttr else pos
if index == pos:
updated_cells.append(elm[0].text)
pos += 1
else:
update_cells.append("")
return updated_cells