如何将列表写入CSV列并去括号?解决CSV写入列表格式异常问题
解决CSV写入时列表带括号和格式异常的问题
这个问题的根源很明确:你现在是把point_values作为单个元素传入writerow的列表参数里,CSV模块会自动把这个列表转换成带方括号的字符串,再因为字符串里包含空格,触发了QUOTE_MINIMAL规则,用|把整个字符串包裹起来,才出现了你看到的异常格式。
要让列表里的每个元素都成为CSV的独立列,并且去掉多余的括号,只需要把point_values的元素展开,和前面的单个变量合并成一个扁平的列表即可,具体修改如下:
基础解决方案
把原来的代码:
face_writer.writerow([photo_paths[i], i, p, norm_ratio, point_values])
改成:
face_writer.writerow([photo_paths[i], i, p, norm_ratio] + point_values)
这样point_values里的每个数值都会被作为单独的列写入CSV,既不会有方括号,也不会被整体用|包裹。举个实际例子:
如果point_values = [20.426, 5986.817, 123.45],修改后写入的行就会是:
your_photo_path,0,p_value,norm_ratio,20.426,5986.817,123.45
特殊情况处理:如果point_values是NumPy数组
如果你的point_values是NumPy数组而不是普通Python列表,直接用加号拼接会报错,需要先把它转换成普通列表:
face_writer.writerow([photo_paths[i], i, p, norm_ratio] + point_values.tolist())
原理补充
CSV writer的writerow方法接受一个扁平的可迭代对象,每个元素对应一列。当你把列表作为单个元素传入时,它会调用str()把这个列表转成字符串(也就是带[]的格式),再根据引号规则处理。而展开列表后,每个数值都是独立元素,CSV模块会直接写入数值本身,不会添加多余的格式符号。
内容的提问来源于stack exchange,提问作者Tom Bar-Gal
相关产品推荐
相关产品推荐

