将Python列表写入单个CSV列

33
我有一列数字要放在一个csv文件的单独一列中。下面的代码将值写在一行中。我该如何更改代码,使Python将每个值写在单独的一行中?谢谢。
        with open('returns.csv', 'wb') as f:
            writer = csv.writer(f)
            writer.writerow(daily_returns)

2
如果只有一列的CSV文件,则不需要使用csv.writer。只需使用“f.writelines([ret + '\n' for ret in daily_returns])”即可。 - Raymond Hettinger
3
也许这有些牵强,但 ret 值可能会包含需要引用的 \n 字符或分隔符。 - unutbu
4个回答

36

使用Python3以w模式打开文件:

with open('returns.csv', 'w') as f:
    writer = csv.writer(f)
    for val in daily_returns:
        writer.writerow([val])

使用Python2.6+,以wb模式打开文件:

with open('returns.csv', 'wb') as f:
    writer = csv.writer(f)
    for val in daily_returns:
        writer.writerow([val])

3
我认为这个开放式调用应该只是 open('returns.csv', 'w') as f: - Casey
谢谢。我尝试了相同的代码,但我的最后一行是writer.writerow(val),我得到了“预期序列”的错误。我没有意识到我需要括号。 - user1028861
@Casey:我倾向于同意,但既然原帖是他写的,我就假设他知道自己在做什么。 - unutbu
1
@unutbu,Casey:请参阅https://dev59.com/7XM_5IYBdhLWcg3w6HzT#1170297#1170297 ... 显然OP已经阅读了文档 :) - John Machin

11

替代方案:假设daily_returns是您希望写入CSV文件中的列表名称,则以下代码应该可以正常工作:

with open('return.csv','w') as f:
    writer = csv.writer(f)
    writer.writerows(zip(daily_returns))

这是我在Python 3.x中找到的唯一可行的解决方案。 - camelCase

5

仅供参考:

我正在使用Python 3.2,以下代码是可以正常运行的:

with open('returns','w')as f:
    writer=csv.writer(f,lineterminator='\n')
    for val in returns:
        writer.writerow([val])

1
在Python 3中,应该使用newline=''参数打开文件,详见文档 - DSM

3

如果你只需要写一个列,我建议避免使用 csv 命令,直接使用纯 Python 与 str.join() 方法

    with open('returns.csv', 'wb') as f:
        f.write("\n".join(daily_returns))

完美运行!我使用了'w'而不是'wb'。谢谢! - Palak Bansal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接