【问题标题】:Writing for loop outputs to CSV columns将 for 循环输出写入 CSV 列
【发布时间】:2014-02-27 20:08:24
【问题描述】:

我有一个打印 4 个细节的 for 循环:

deats = soup.find_all('p')
    for n in deats:
        print n.text

输出是 4 行打印。

我想做的不是打印,而是将每个“n”写入 .csv 中的不同列。显然,当我使用常规 .write() 时,它会将其放在同一列中。换句话说,我如何让它将循环的每次迭代写入下一列?

【问题讨论】:

  • 按照我的建议使用 csv 中的 writerow()!

标签: python csv


【解决方案1】:

您可以将 csv 行创建为循环(或使用列表解析)我将展示显式循环以便于阅读,您可以自己将其更改为单个列表解析行。

row = []
for n in deats:
  row.append(n)

现在您已准备好使用 csv.Writer() 写入 .csv 文件的行

【讨论】:

    【解决方案2】:

    嘿,试试这样:

    import csv
    
    csv_output = csv.writer(open("output.csv", "wb"))   # output.csv is the output file name!
    csv_output.writerow(["Col1","Col2","Col3","Col4"]) # Setting first row with all column titles
    
    temp = []
    deats = soup.find_all('p')
    for n in deats:
        temp.append(str(n.text))
    csv_output.writerow(temp)
    

    【讨论】:

    • 嗨 S.M.所以,我对此有点困惑。这会在写入之前添加一个新行吗?
    • 是的,确实如此!如果不需要,则删除此行: csv_output.writerow(["Col1","Col2","Col3","Col4"]) # 设置第一行的所有列标题
    • 当然,但假设死循环嵌套在另一个 for 循环中。当我再次进入死亡循环时会发生什么?是否可以将其设置为添加一个新的以开始编写下一个迭代?
    • 添加新行?你是说?
    • 是的。所以,想象一下: ln 1: for x in range(1,4) ln 2:name = "Joe" ln3 for n in deats ln4 print n.text 我不仅想把 deats 放到行中,而且姓名。由于顶部的 for 循环,这将发生 3 次。因此,对于循环的每次迭代,我都需要添加一个新行,并且我需要写入该行。
    【解决方案3】:

    您为此使用csv 模块:

    import csv
    with open('output.csv', 'wb') as csvfile:
        opwriter = csv.writer(csvfile, delimiter=','
        opwriter.writerow([n.text for n in deats])
    

    【讨论】:

      【解决方案4】:
      extra_stuff = pie,cake,eat,too
      some_file.write(",".join(n.text for n in deats)+"," + ",".join(str(s) for s in extra_stuff))
      

      ???这就是你要找的所有东西吗?

      【讨论】:

      • 是的,这行得通。我很尴尬。也许这有点难:假设除了 n 个死亡之外,我还想在同一行写 5 个其他东西?我可以在一行 python 中做到这一点吗?其他变量有,比如“pie”、“cake”、“eat”、“too”。
      • 我认为值得注意的是,这不会处理n.text 包含逗号或换行符的情况。这就是为什么其他人都推荐csv 模块。
      • 当然值得注意...... 9/10 次我发现 csv 模块对于这类事情来说太过分了(尽管对于 html 内容可能不是)
      • 嗯,我收到一个类型错误,因为该函数只接受 1 个参数,但给出了 3 个参数。我应该澄清一下,pie = "pie" 我想将 pie 写到下一列。我认为 ...for n in deats) + pie) 返回错误。感谢您的帮助。
      • @JoranBeasley:不要忘记deatsextra_stuff 之间的逗号。它开始达到在进行任何连接之前构建单个组合列表可能更具可读性的地步。
      猜你喜欢
      • 2020-08-08
      • 2019-07-20
      • 1970-01-01
      • 2018-10-05
      • 2016-09-30
      • 2018-01-19
      • 2021-08-19
      • 2014-07-29
      • 2017-08-26
      相关资源
      最近更新 更多