【问题标题】:Save a list of tuple to csv file in python在python中将元组列表保存到csv文件
【发布时间】:2021-11-28 17:27:31
【问题描述】:

我有一个如下所示的元组列表:

data = [(1633098324445950024, 139.55, 15, [14, 37, 41]),
        (1633098324445958000, 139.55, 100, [14, 41]),
        (1633098324445958498, 139.55, 60, [14, 37, 41]),
        (1633098324446013523, 139.55, 52, [14, 37, 41]),
        (1633098324472392943, 139.555, 100),
        (1633098324478972256, 139.555, 100)]

我正在尝试将其保存在 csv 文件中:

def save_csv(data, path, filename):
    with open(os.path.join(path, str(filename) + '_data.csv'), "w") as outfile:
        outfile.write("\n".join(f"{r[0]},{r[1]},{r[2]},{r[3]}" for r in data))

save_csv(data, path, filename)

我收到IndexError:

    outfile.write("\n".join(f"{r[0]},{r[1]},{r[2]},{r[3]}" for r in data))

IndexError: tuple index out of range

我希望结果如下所示:

【问题讨论】:

  • 最后两行只有3个元素,所以没有r[3]
  • 顺便说一句,生成的文件不是 CSV - 最后一列中包含未转义的逗号分隔符。

标签: python list csv tuples


【解决方案1】:

您有可变数量的列 - r[3] 不会一直存在。这是 pandas 的一个很好的用例,它将根据需要添加默认值。我有点微妙,但 pandas 也会引用最后一列,以便以后的读者知道忽略其嵌入的逗号。

import pandas as pd

data = [(1633098324445950024, 139.55, 15, [14, 37, 41]),
        (1633098324445958000, 139.55, 100, [14, 41]),
        (1633098324445958498, 139.55, 60, [14, 37, 41]),
        (1633098324446013523, 139.55, 52, [14, 37, 41]),
        (1633098324472392943, 139.555, 100),
        (1633098324478972256, 139.555, 100)]

pd.DataFrame(data).to_csv("test.csv")

【讨论】:

    【解决方案2】:
    import csv
    
    data = [(1633098324445950024, 139.55, 15, [14, 37, 41]),
            (1633098324445958000, 139.55, 100, [14, 41]),
            (1633098324445958498, 139.55, 60, [14, 37, 41]),
            (1633098324446013523, 139.55, 52, [14, 37, 41]),
            (1633098324472392943, 139.555, 100),
            (1633098324478972256, 139.555, 100)]
    
    with open("csv.csv", "w") as f:
        csv_writer = csv.writer(f)
        for mytuple in data:
            csv_writer.writerow(mytuple)
    

    【讨论】:

    • 这是正确的解决方案,因为 csv 模块将正确引用列表,因此逗号不会被视为字段分隔符。
    猜你喜欢
    • 2016-08-25
    • 2018-12-20
    • 2022-12-23
    • 1970-01-01
    • 2016-05-17
    • 1970-01-01
    • 2016-12-09
    • 1970-01-01
    • 2021-07-04
    相关资源
    最近更新 更多