【问题标题】:Python Write a list into csv, can't put values into a columnPython将列表写入csv,无法将值放入列中
【发布时间】:2017-11-21 03:34:02
【问题描述】:

我有这个国家列表:

country = ['Togo', 'Nauru', 'Palestine, State of', 'Malawi']

我正在尝试将其写入 csv:

with open('temp.csv', 'wt') as output_write:
    csvout = csv.writer(output_write)
    csvout.writerow(country)
    output_write.close()

但是,输出将值放入一行而不是 csv 中的一列。谁能告诉我怎么改?

提前致谢!


我遵循了下面的一些建议,输出的行之间有空行:

我使用的代码:

import csv
country = ['Togo', 'Nauru', 'Palestine, State of', 'Malawi']
with open('temp.csv', 'wt') as output_write:
    csvout = csv.writer(output_write)
    for item in country:
        csvout.writerow((item, ))

更新:

我想出了我得到一个空行的原因,因为每一行都是因为 Windows 以不同的方式解释新行。最终对我有用的代码是:

import csv
country = ['Togo', 'Nauru', 'Palestine, State of', 'Malawi']
with open('temp.csv', 'w', newline = '') as output_write:
    csvout = csv.writer(output_write)
    for item in country:
        csvout.writerow((item, ))

找到关于空行的相关帖子:

python empty row

【问题讨论】:

  • 您正在调用的函数的名称是writerow。你为什么希望它写一个专栏?
  • 我同意@Shadow,该函数的名称显然是写一行而不是列

标签: python csv


【解决方案1】:

如果要将每个项目写入单独的行,则必须遍历列表:

import csv

country = ['Togo', 'Nauru', 'Palestine, State of', 'Malawi']

with open('temp.csv', 'wt') as output_write:
    csvout = csv.writer(output_write, delimiter=',')
    for c in country:
         csvout.writerow([c])

【讨论】:

  • 它可能会或可能不会导致错误 - 但 with 用法会关闭文件。手动操作要么是错误的,要么是多余的。
  • 谢谢。但是,这会在每条记录之间产生一个空行。有什么办法可以消除空行?
  • @vivi11130704 在我的情况下,我没有看到空行(结尾的除外)。
  • 我更新了我的原始帖子以包含我得到的内容的屏幕截图。不知道为什么我得到的结果与其他人不同。我正在使用 jupyter 笔记本。
  • @Shadow 它不会崩溃,我发现 :) stackoverflow.com/questions/39600786/…
【解决方案2】:

试试这个:

import csv

countries = ['Togo', 'Nauru', 'Palestine, State of', 'Malawi']

with open('temp.csv', 'w') as output_write:
    csvout = csv.writer(output_write, lineterminator='\n')
    for country in countries:
         csvout.writerow([country])

【讨论】:

    【解决方案3】:

    尝试以下方法:

    country = ['Togo', 'Nauru', 'Palestine, State of', 'Malawi']
    with open('temp.csv', 'wt') as output_write:
        csvout = csv.writer(output_write, lineterminator='\n')
        for item in country:
            csvout.writerow((item, ))
    

    【讨论】:

    • 这样好多了:)
    • 谢谢。但是,这会在每条记录之间产生一个空行。有什么办法可以消除空行?
    • 不,它没有生成任何空行@vivi11130704。我刚刚运行它
    • @vivi11130704:我已经在 J​​upyter notebook 中运行了代码。生成的 csv 没有空行。也许你的 csv 阅读器的问题?你能在纯文本编辑器中打开生成的 CSV 文件吗?
    • 为防止出现空行,请使用csvout = csv.writer(output_write, lineterminator="\n")Source
    猜你喜欢
    • 2018-05-03
    • 2021-07-02
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    • 2013-07-16
    • 2018-11-22
    • 1970-01-01
    相关资源
    最近更新 更多