首页 > 解决方案 > Python csv 列的元组列表

问题描述

我有一个 (x,y) 元组的列表,它们都是它们自己的 x 和 y 列表,如下所示:

[
([44.651162790697676, 44.651162790697676, 44.651162790697676, 44.651162790697676, 44.651162790697676, 44.651162790697676, 44.651162790697676, 44.651162790697676, 44.651162790697676, 44.651162790697676]
, [42.592592592592595, 42.592592592592595, 42.592592592592595, 42.592592592592595, 42.592592592592595, 42.592592592592595, 42.592592592592595, 42.592592592592595, 42.592592592592595, 42.592592592592595])
]

主要思想是在此列表中有多个元组,仅用于示例目的。

我需要将元组中的每个列表放入电子表格列中,为此我使用以下代码:

def saveSpreadsheet(fpath, fname, list):
index = 1
for sublist in list:
    with open(os.path.join(fpath, fname + str(index) + '.csv'), 'w', newline='') as myfile:
        writer = csv.writer(myfile, delimiter=';')
        writer.writerow(("training","test"))
        for row in sublist:
            writer.writerow(row)
        index += 1

该方法获取文件夹路径、文件名和所述列表,并生成 csv。我的问题是它不是保存在列中,而是保存在行中:

在此处输入图像描述

假定的输出应如下所示:

在此处输入图像描述

我在这里做错了什么?

标签: pythonpython-3.xlistcsvtuples

解决方案


鉴于您的数据:

data = [
     (
        [44.651162790697676, 44.651162790697676, 44.651162790697676, 44.651162790697676, 44.651162790697676, 44.651162790697676, 44.651162790697676, 44.651162790697676, 44.651162790697676, 44.651162790697676],
        [42.592592592592595, 42.592592592592595, 42.592592592592595, 42.592592592592595, 42.592592592592595, 42.592592592592595, 42.592592592592595, 42.592592592592595, 42.592592592592595, 42.592592592592595]
     )
]

我们需要将其转换为您可以逐行编写的内容。邮编效果很好:

for a in zip(data[0][0], data[0][1]):
    print(a)

导致:

(44.651162790697676, 42.592592592592595)
(44.651162790697676, 42.592592592592595)
(44.651162790697676, 42.592592592592595)
(44.651162790697676, 42.592592592592595)
(44.651162790697676, 42.592592592592595)
(44.651162790697676, 42.592592592592595)
(44.651162790697676, 42.592592592592595)
(44.651162790697676, 42.592592592592595)
(44.651162790697676, 42.592592592592595)
(44.651162790697676, 42.592592592592595)

我认为您可以很好地处理其余部分,并且可以适应这一点。有关更多详细信息,请参阅此类似(重复?)问题:Python: CSV write by column 而不是 row

评论中的建议都提供了很好的建议。如果不能保证列的长度相等,itertools.zip_longest()那就是要走的路。Pandas 确实提供了更多功能和更好的效率。不过不要过早优化。如果这满足了您的所有需求并且您没有遇到问题,那么您可以摆脱它。Pandas 确实需要一些时间来学习,但从长远来看,如果你会做更多这样的事情,它可能是值得的。


推荐阅读