首页 > 解决方案 > 将列表的每个元素写入元组中作为 csv 的单独列

问题描述

我有一个数据结构,我只想在1 行中写入 csv fie 。这是在运行下一次迭代时,它为我正在创建的 csv 的每个标题字段添加一个新行。

例如,我试图写入 csv 的行看起来像这样。在这里,我希望列表的每个元素都放在单独的列中。意思是,4.1% 应该到第 2 列,11.5% 到第 3 列,依此类推。

rowdict = {tuple:4}

('Row 1 data', ['4.1%', '11.5%', '21.1%', '2.6%', '14.8%', '0.4%', '9.6%', '35.6%', '0.0%', '0.4%'], [11, 31, 57, 7, 40, 1, 26, 96, 0, 1], 270)

我的片段:

f = open(completeName + '.csv', 'a', newline='', encoding='utf-8')
    with f:
        # identifying header
        header = header_list
        writer = csv.DictWriter(f, fieldnames=header)
        # writing data row-wise into the csv file
        writer.writeheader()
        all_perce_val = ["{:.1%}".format(x) for x in all_fractions_list]
        for i in range(1,len(all_perce_val)):
            writer.writerow((str(os.path.split(os.path.split(directory)[0])[1]), all_perce_val, count_of_each_type, total_cycle_count))
    print("Finished writing the csv file at:"+completeName)

我正在努力弄清楚如何将我必须的多个列表传递给 writerow() 以便它以我需要的方式编写它们。

更新:我改变了我的方法并尝试使用数据框

data_row = []
    data_row.extend([str(os.path.split(os.path.split(directory)[0])[1])])
    data_row.extend(all_perce_val)
    data_row.extend(count_of_each_type)
    data_row.extend([total_cycle_count])
    final_data_row = [data_row]
    df_row = pd.DataFrame(data=final_data_row, columns=header).fillna('')
    mode = 'w' if header_flag else 'a'
    df_row.to_csv(completeName + '.csv', mode=mode, index=None)
    header_flag = False

但是,我想避免在每次循环迭代中写入列名。上面的片段正在挣扎。

标签: pythonpython-3.xdataframedictionarytuples

解决方案


您应该在使用它之前解压缩列表writer.writerow

>>> row=('Row 1 data', ['4.1%', '11.5%', '21.1%', '2.6%', '14.8%', '0.4%', '9.6%', '35.6%', '0.0%', '0.4%'], [11, 31, 57, 7, 40, 1, 26, 96, 0, 1], 270)
>>> row=(row[0],*row[1],*row[2],row[3])
>>> row
('Row 1 data', '4.1%', '11.5%', '21.1%', '2.6%', '14.8%', '0.4%', '9.6%', '35.6%', '0.0%', '0.4%', 11, 31, 57, 7, 40, 1, 26, 96, 0, 1, 270)

现在你可以使用了writer.writerow(row)


推荐阅读