【问题标题】:Entire string in For loop, not just character by characterFor循环中的整个字符串,而不仅仅是逐个字符
【发布时间】:2014-09-29 16:54:23
【问题描述】:

使用 CSV 编写器,我正在尝试将字符串列表写入文件。

每个字符串应该占据一个单独的行。

sectionlist = ["cat", "dog", "frog"]

当我实现以下代码时:

with open('pdftable.csv', 'wt') as csvfile:
        writer = csv.writer(csvfile, delimiter=',')
        for i in sectionlist:
            writer.writerow(i)

我创造

c,a,t
d,o,g
f,r,o,g

当我想要时

cat
dog
frog

为什么for 循环会分别解析每个字符,如何将整个字符串一起传递到csv.writer 以便每个字符都可以写入?

【问题讨论】:

  • 将您的列表称为“列表”是个坏主意
  • list(不要为自己的变量使用该名称)与sectionlist 有什么关系?
  • 实际文件是一个人口统计数据列表,非常适合 csv 写入,因为我希望能够在 excel 中对其进行编辑。如果将其编写为文本文件更容易并完成相同的任务,请告诉我!谢谢
  • 不好意思叫它list,原来叫sectionlist

标签: python string csv for-loop


【解决方案1】:

看起来你甚至不需要使用 csv writer。

l = ["cat", "dog", "frog"]        # Don't name your variable list!
with open('pdftable.csv', 'w') as csvfile:
    for word in l:
        csvfile.write(word + '\n')

或如@GP89 ​​建议的那样

with open('pdftable.csv', 'w') as csvfile:
    csvfile.writelines(l)

【讨论】:

    【解决方案2】:

    我认为你需要的是:

    with open('pdftable.csv', 'wt') as csvfile:
        writer = csv.writer(csvfile, delimiter=',')
        for i in sectionlist:
            writer.writerow([i]) # note the square brackets here
    

    writerow 将其参数视为一个可迭代对象,因此如果您传递一个字符串,它会将每个字符视为行中的一个元素;但是,您希望整个字符串成为一个项目,因此您必须将其包含在列表或元组中。

    PD:也就是说,如果您的特定案例并不比您发布的更复杂,那么您可能根本不需要 csv.writer,正如其他答案所建议的那样。

    【讨论】:

    • 谢谢!这是对我的代码进行的最简单的编辑!你教会了我一些有价值的东西:)
    【解决方案3】:

    问题是i 代表一个字符串(单词),而不是一个列表(行)。字符串在 Python 中也是可迭代的(字符的)序列,因此 CSV 函数可以毫无错误地接受对象,即使结果很“奇怪”。

    修复sectionlist,使其成为字符串列表(行)列表,因此i 将成为字符串列表,包装每个单词在列表中当用作writerow 参数时,或者干脆不使用writerow,它需要一个字符串列表

    简单地说,以下结构将被正确保存:

    sectionlist = [
        ["cat", "meow"],
        ["dog"],
        ["frog", "hop", "pond"]
    ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-06
      • 1970-01-01
      • 2018-11-21
      • 1970-01-01
      • 2023-03-21
      • 2015-11-29
      相关资源
      最近更新 更多