【问题标题】:How do I write a list of strings to a CSV file, with each item of the list on a new row?如何将字符串列表写入 CSV 文件,列表中的每个项目都在新行上?
【发布时间】:2020-06-10 03:30:12
【问题描述】:

我有一个字符串列表如下:

sentence = ['this stuff', 'is not','that easy']

我想写入一个 csv 文件,列表中的每个项目位于不同的行。

当我使用下面的代码时,

with open(os.path.join(path, 'testlist.csv'), 'w') as my_file:
    f_writer = csv.writer(my_file)
    f_writer.writerow(sentence)

我得到以下输出:

this stuff,is not,that easy

如何将列表中的每个项目放在不同的行上?

【问题讨论】:

  • 这听起来像是一道作业题。有几种方法可以非常简单地做到这一点,有些甚至不使用 csv 模块。 (一行打印语句就可以了。)但我会给你一个 csv 方式的线索:在 csv 模块文档中查找“分隔符”
  • 要保留逗号吗?
  • 哈,它闻起来像一个,但不是!我基本上已经刮掉了一篇博文,并且想将每个 p 标签打印到 csv 文件中的单独行中。我已将其简化为在此处发布。我不需要逗号。感谢您的提示 - 也会检查分隔符
  • 我在下面给出了一个更明确、有点半开玩笑的答案。

标签: python list csv


【解决方案1】:

既然其他人已经给了你一些答案,那么你就进入 Python 3.x:

print (*sentence,sep='\n',file=open(os.path.join(path, 'testlist.csv'), 'w'))

或者在 Python 2.7 中你可以这样做:

print open(os.path.join(path, 'testlist.csv'), 'w'),"\n".join(sentence)

(以上都不需要csv模块)

在你的例子中,我认为你可以改变

f_writer = csv.writer(my_file)

f_writer = csv.writer(my_file, delimiter='\n')

而在真正的延伸中,你可能会改为改变:

 f_writer.writerow(sentence)

 f_writer.writerows(list([x] for x in sentence))

Python 快乐!

【讨论】:

  • 我用分隔符运行了这段代码:sentence = ['this stuff', 'is not','that easy'] with open('test.csv', 'w') as my_file: f_writer = csv.writer(my_file, delimiter='\n') for s in sentence: f_writer.writerow([s]) csv 文件看起来像这样(因为我无法在 cmets 上显示新行,所以我正在使用 \n):t\n h\n i\n s\n \n s\n t\n u\n f\n f\n跨度>
  • @JeffGruenbaum 它适用于分隔符,但您不需要循环 - 它使用 writerow 工作
  • 感谢 Rufus,我有很多选择可以解决和理解。您的最后一个建议实质上是将句子中的每个项目转换为一个列表,然后将该列表写为单独的行?我的理解正确吗?
  • 正如@Chadmeistr 所说:不要使用 for 循环。
  • 你明白了,@Chadmeistr。但我必须告诉你,我只是用键盘完成的,未经测试。
【解决方案2】:

如果您希望该行的元素位于单独的行中,则写入行获取一个列表并将其写入以, 分隔的一行

一一传递

sentence = ['this stuff', 'is not','that easy']
with open(os.path.join(path, 'testlist.csv'), 'w') as my_file:
    f_writer = csv.writer(my_file)
    for s in sentence: f_writer.writerow([s])
    # f_writer.writerow(sentence)

【讨论】:

  • 有趣的是,使用 f_writer.writerow(s) 会用逗号将其打印出来,而 f_writer.writerow([s]) 会在没有逗号的情况下打印出来。那里发生了什么?!
  • 如果你给它一个列表,它知道该行有1个元素,否则它会把字符串chars作为元素
  • 所以如果我理解正确的话,使用 [s] 基本上将原始列表中的每个项目都视为单个项目列表。然后将哪个打印在单独的行上?
  • 宾果游戏,是的。您也可以使用writerows,它将列表列表作为输入,其中每个列表是一行
【解决方案3】:

这行得通:

import pandas as pd
sentence = ['this stuff', 'is not','that easy']
sent = pd.Series(sentence)
sent.to_csv('file.csv', header = False)

【讨论】:

  • 谢谢,有没有办法不用熊猫?
  • 是的,看看csv 模块。有大量实用程序可以帮助您完成这项任务。我认为 pandas 方法是最简单快捷的方法。
【解决方案4】:

1) 在“句子”中使用列表

2) 将“writerow”替换为“writerows”

例如:

# Change 1
sentence = [['this stuff'], ['is not'],['that easy']]

with open(os.path.join(path, 'testlist.csv'), 'w') as my_file:
    f_writer = csv.writer(my_file)
# Change 2
    f_writer.writerows(sentence)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-15
    • 2020-10-03
    • 2020-09-12
    • 2011-10-18
    相关资源
    最近更新 更多