【问题标题】:writing a list to multiple rows into csv file using python使用python将多行列表写入csv文件
【发布时间】:2018-03-05 13:47:16
【问题描述】:

如何将以下列表拆分为多行(3 行)并使用 python 写入 csv 文件。

holidays = ['2017-01-01', "New Year's Day", 'NSW', '2017-01-02', "New Year's Day (Observed)", 'NSW', '2017-01-26', 'Australia Day', 'NSW', '2017-04-14', 'Good Friday', 'NSW', '2017-04-15', 'Easter Saturday', 'NSW']

以下代码将所有值写入 csv 中的单个列。

Title = ('date', 'name','state')

with open(fileName,"w") as output:
    writer = csv.writer(output,lineterminator='\n')
    for val in lstAll:
        writer.writerow([val])

【问题讨论】:

    标签: python python-2.7 python-3.x csv


    【解决方案1】:

    这里有一个详细的例子来说明列表解释是如何工作的:

    with open('outfile.csv', 'w') as outfile:
        writer = csv.writer(outfile)
        rows = [[holiday, holidays[i+1], holidays[i+2]] for i, holiday in enumerate(holidays) if i % 3 == 0]
        for row in rows:
            writer.writerow(row)
    

    【讨论】:

    • 这里没有列表切片。
    【解决方案2】:

    使用pandas的解决方案

    import pandas as pd
    
    holidays = ['2017-01-01', "New Year's Day", 'NSW', '2017-01-02', "New Year's Day (Observed)", 'NSW', '2017-01-26', 'Australia Day', 'NSW', '2017-04-14', 'Good Friday', 'NSW', '2017-04-15', 'Easter Saturday', 'NSW']
    col_titles = ('date', 'name','state')
    
    data = pd.np.array(holidays).reshape((len(holidays) // 3, 3))
    
    pd.DataFrame(data, columns=col_titles).to_csv("holidays.csv", index=False)
    

    地点:

    1. pd.np.array(holidays)holidays 转换为 numpy.array
    2. .reshape((len(holidays) // 3, 3)) 将数组的结构改为三个“列”
    3. pd.DataFrame(data, columns=col_titles) 从 data 和 col_titles 创建一个 pandas.Dataframe
    4. .to_csv("holidays.csv", index=False) 将数据框保存到 CSV 文件中

    holidays.csv的内容:

    date,name,state
    2017-01-01,New Year's Day,NSW
    2017-01-02,New Year's Day (Observed),NSW
    2017-01-26,Australia Day,NSW
    2017-04-14,Good Friday,NSW
    2017-04-15,Easter Saturday,NSW
    

    请注意,如果您在to_csv 中使用index=False,则不会包含索引。

    【讨论】:

      【解决方案3】:

      您可以使用列表切片以 3 块为单位处理列表:

      with open(fileName, "w") as output:
          writer = csv.writer(output, lineterminator='\n')
          for i in range(0, len(lst), 3)):
              writer.writerow(lst[i:i+3])
      

      【讨论】:

        猜你喜欢
        • 2012-12-11
        • 1970-01-01
        • 2023-03-15
        • 1970-01-01
        • 2013-10-16
        • 2018-04-02
        • 1970-01-01
        相关资源
        最近更新 更多