Python 将循环输出写入CSV列

Python 将循环输出写入CSV列,python,csv,Python,Csv,我有一个for循环,可以打印4个细节: deats = soup.find_all('p') for n in deats: print n.text 输出为4个打印行 我想做的不是打印,而是将每个“n”写入.csv中的不同列。显然,当我使用正则.write()时,它会将其放在同一列中。换句话说,我如何让它将循环的每个迭代写入下一列 extra_stuff = pie,cake,eat,too some_file.write(",".join(n.text for n

我有一个for循环,可以打印4个细节:

deats = soup.find_all('p')
    for n in deats:
        print n.text
输出为4个打印行

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

extra_stuff = pie,cake,eat,too
some_file.write(",".join(n.text for n in deats)+"," + ",".join(str(s) for s in extra_stuff))
???这就是你想要的吗


???这就是你想要的吗

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

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

现在您已经准备好使用csv.Writer()将行写入.csv文件了。

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

row = []
for n in deats:
  row.append(n)
现在,您已经准备好使用csv.Writer()将行写入.csv文件了。

Hei,请尝试以下操作:

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)
嘿,试试这个:

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)
您可以使用该模块执行以下操作:

import csv
with open('output.csv', 'wb') as csvfile:
    opwriter = csv.writer(csvfile, delimiter=','
    opwriter.writerow([n.text for n in deats])
您可以使用该模块执行以下操作:

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


按照我的建议,从csv使用writerow()!按照我的建议,从csv使用writerow()!是的,这个有效。我很尴尬。也许这有点难:假设,除了n个deats之外,我还想在同一行中写5个其他的东西?我可以在python的一行代码中实现这一点吗?其他变量是,比如,“派”、“蛋糕”、“吃”、“太”。我认为值得注意的是,这不会处理
n.text
包含逗号或换行符的情况。这就是为什么其他人都推荐
csv
模块的原因。当然值得注意。。。9/10次,我发现csv模块对于这类事情来说太过分了(尽管对于html内容可能不是),嗯,我得到了一个类型错误,因为该函数只接受1个参数,但给出了3个参数。我应该澄清一下,pie=“pie”,我想把pie写到下一个专栏。我认为…对于deats中的n)+pie)返回错误。谢谢你的帮助。@JoranBeasley:别忘了
数据和
额外数据之间的逗号。在进行任何连接之前,构建一个组合列表可能会更具可读性。我很尴尬。也许这有点难:假设,除了n个deats之外,我还想在同一行中写5个其他的东西?我可以在python的一行代码中实现这一点吗?其他变量是,比如,“派”、“蛋糕”、“吃”、“太”。我认为值得注意的是,这不会处理
n.text
包含逗号或换行符的情况。这就是为什么其他人都推荐
csv
模块的原因。当然值得注意。。。9/10次,我发现csv模块对于这类事情来说太过分了(尽管对于html内容可能不是),嗯,我得到了一个类型错误,因为该函数只接受1个参数,但给出了3个参数。我应该澄清一下,pie=“pie”,我想把pie写到下一个专栏。我认为…对于deats中的n)+pie)返回错误。谢谢你的帮助。@JoranBeasley:别忘了
数据和
额外数据之间的逗号。现在,在进行任何连接之前,构建一个组合列表可能更具可读性。这会在写入之前添加新行吗?是的,会!如果不需要,请删除以下行:csv_output.writerow([“Col1”、“Col2”、“Col3”、“Col4”)#设置第一行的所有列标题确保,但假设deats循环嵌套在另一个for循环中。当我再次进入deats循环时会发生什么?是否可以将其设置为添加新行以开始编写下一个迭代?是否可以添加新行?你是说?是的。想象一下:ln 1:for x在范围(1,4)ln 2:name=“Joe”ln3 for n在deats ln4 print n.text中,我不仅要把deats放在行中,还要放在name中。由于顶部的for循环,这将发生3次。因此,对于循环的每个迭代,我需要添加一个新行,并且我需要写入该行。嗨,S.M.所以,我对此有点困惑。这会在写入之前添加新行吗?是的,会!如果不需要,请删除以下行:csv_output.writerow([“Col1”、“Col2”、“Col3”、“Col4”)#设置第一行的所有列标题确保,但假设deats循环嵌套在另一个for循环中。当我再次进入deats循环时会发生什么?是否可以将其设置为添加新行以开始编写下一个迭代?是否可以添加新行?你是说?是的。想象一下:ln 1:for x在范围(1,4)ln 2:name=“Joe”ln3 for n在deats ln4 print n.text中,我不仅要把deats放在行中,还要放在name中。由于顶部的for循环,这将发生3次。因此,对于循环的每个迭代,我需要添加一个新行,并且需要写入该行。