【问题标题】:csv.writer writing each character of word in separate column/cellcsv.writer 在单独的列/单元格中写入单词的每个字符
【发布时间】:2013-02-14 07:00:00
【问题描述】:

目的:从models中所有行内的锚标记中提取文本并将其放入csv中。

我正在尝试这段代码:

with open('Sprint_data.csv', 'ab') as csvfile:
  spamwriter = csv.writer(csvfile)
  models = soup.find_all('li' , {"class" : "phoneListing"})

  for model in models:

      model_name = unicode(u' '.join(model.a.stripped_strings)).encode('utf8').strip()
      spamwriter.writerow(unicode(u' '.join(model.a.stripped_strings)).encode('utf8').strip())

除了 csv 中的每个单元格只包含一个字符之外,它工作正常。

像这样:

|  S  |  A  |   M  |   S  |   U   |  N  |   G   |

代替:

|SAMSUNG|

我当然错过了一些东西。但是什么?

【问题讨论】:

    标签: python csv web-scraping


    【解决方案1】:

    .writerow() 需要一个序列(''()[])并将每个索引按顺序放置在行的自己的列中。如果您想要的字符串不是序列中的项目,writerow() 将遍历字符串中的每个字母,每个字母都将写入您的 CSV 中的单独单元格。

    在你之后import csv

    如果这是你的清单:

    myList = ['Diamond', 'Sierra', 'Crystal', 'Bridget', 'Chastity', 'Jasmyn', 'Misty', 'Angel', 'Dakota', 'Asia', 'Desiree', 'Monique', 'Tatiana']
    
    
    listFile = open('Names.csv', 'wb')
    writer = csv.writer(listFile)
    for item in myList:
        writer.writerow(item)
    

    上述脚本将生成以下 CSV: 名称.csv

    D,i,a,m,o,n,d
    S,i,e,r,r,a
    C,r,y,s,t,a,l
    B,r,i,d,g,e,t
    C,h,a,s,t,i,t,y
    J,a,s,m,y,n
    M,i,s,t,y
    A,n,g,e,l
    D,a,k,o,t,a
    A,s,i,a
    D,e,s,i,r,e,e
    M,o,n,i,q,u,e
    T,a,t,i,a,n,a
    

    如果您希望每个名称都在其自己的单元格中,解决方案是将字符串 (item) 简单地按顺序排列。这里我使用方括号[]。 :

    listFile2 = open('Names2.csv', 'wb')
    writer2 = csv.writer(listFile2)
    for item in myList:
        writer2.writerow([item])
    

    带有.writerow([item]) 的脚本会产生所需的结果: Names2.csv

    Diamond
    Sierra
    Crystal
    Bridget
    Chastity
    Jasmyn
    Misty
    Angel
    Dakota
    Asia
    Desiree
    Monique
    Tatiana
    

    【讨论】:

    • 喜欢这个解决方案多么简单。谢谢!
    • 嗨。有没有办法在不使用for 循环的情况下将整个列表写入csv?
    【解决方案2】:

    writerow 接受一个序列。你给它一个字符串,所以它把它当作一个序列,字符串就像字符序列一样。

    您还想要这一行的什么?没有?如果是这样,请将其列为一项:

    spamwriter.writerow([u' '.join(model.a.stripped_strings).encode('utf8').strip()])
    

    (顺便说一下,unicode() 调用是完全没有必要的,因为您已经加入了 unicode 分隔符。)

    【讨论】:

      【解决方案3】:

      这通常是我使用的解决方案:

      import csv
          with open("output.csv", 'w', newline= '') as output:
              wr = csv.writer(output, dialect='excel')
              for element in list_of_things:
                  wr.writerow([element])
              output.close()
      

      这应该在单列而不是单行中为您提供所有列表元素的输出。

      这里的重点是遍历列表并使用“[list]”来避免 csvwriter 排序问题。

      希望这个有用!

      【讨论】:

      • 这真是太棒了,应该得到更多的选票。谢谢先生。
      【解决方案4】:

      只需用列表符号将其包围(即[]

      writer.writerow([str(one_column_value)])
      

      【讨论】:

        猜你喜欢
        • 2021-08-13
        • 2021-02-08
        • 2015-07-30
        • 1970-01-01
        • 2016-07-30
        • 2021-08-10
        • 2021-05-15
        • 1970-01-01
        相关资源
        最近更新 更多