【问题标题】:python list to csv file with each item in new linepython列表到csv文件,每个项目都在新行中
【发布时间】:2018-12-08 14:04:36
【问题描述】:

我正在尝试编写一个函数,该函数接收字符串列表并将列表中的每个字符串作为单独的行写入 csv 文件,但我没有得到任何输出。你能帮我理解我做错了什么吗?这是我的代码:

 import sys 
 import os
 import csv

 list= ['name@domain.com', 'name@domain.com', 'name@domain.com', 'name@domain.com', 'name@domain.com', 'name@domain.com']

 def write_to_csv(list_of_emails):
     with open('emails.csv', 'w', newline='') as csvfile:
         writer = csv.writer(csvfile, delimiter = ',')
         writer.writerows(list_of_emails)

write_to_csv(list)  

【问题讨论】:

    标签: python list csv


    【解决方案1】:

    您为什么不尝试使用pandas 来代替。这非常容易。 :)

    lst = ['name@domain.com', 'name@domain.com', 'name@domain.com', 'name@domain.com', 'name@domain.com', 'name@domain.com']
    

    首先,导入包

    import pandas
    

    然后,创建数据框

    df = pandas.DataFrame(data={"email": lst})
    

    然后,导出到 csv :)

    df.to_csv("./mycsv.csv", sep=',',index=False)
    

    完成 :) 让我知道这个是否适合您!

    【讨论】:

      【解决方案2】:

      如果您只是将每个字符串写在单独的行上,您可以保持简单,只需使用\n 编写每个项目:

      lst= ['name1@domain.com', 'name2@domain.com', 'name3@domain.com']
      
      def write_to_csv(list_of_emails):
          with open('emails.csv', 'w') as csvfile:
              for domain in list_of_emails:
                  csvfile.write(domain + '\n')
      
      write_to_csv(lst)
      

      哪些输出:

      name1@domain.com
      name2@domain.com
      name3@domain.com
      

      您也不应该使用list 作为变量名,因为它会影响内置函数list

      【讨论】:

        【解决方案3】:

        您可以按如下方式更改代码:

        import sys 
        import os
        import csv
        
        listOfLines= [['name@domain.com', 'name@domain.com', 'name@domain.com', 'name@domain.com', 'name@domain.com', 'name@domain.com']]
        
        def write_to_csv(list_of_emails):
           with open('emails.csv', 'w', newline='') as csvfile:
               writer = csv.writer(csvfile, delimiter = ',')
               writer.writerows(list_of_emails)
        
        write_to_csv(listOfLines)
        

        函数writer.writerows() 接受一个列表列表,在我们的例子中 [['name@domain.com', 'name@domain.com', 'name@domain.com', 'name@domain.com', 'name@domain.com', 'name@domain.com']], 其中原始列表中的每个子列表都被视为 CSV 文件的单行。 您也不应该使用保留关键字,如 list 变量名。 list,dict 是分别用于创建列表和字典的函数。可能在您的代码中它没有抛出任何错误,但是对于比当前有问题的代码块更大的脚本,解释器会抛出相同的错误,并且此类错误变得更难调试

        【讨论】:

          【解决方案4】:

          您需要使用writerow

          例如:

          import sys 
          import os
          import csv
          
          l= ['name@domain.com', 'name@domain.com', 'name@domain.com', 'name@domain.com', 'name@domain.com', 'name@domain.com']
          
          def write_to_csv(list_of_emails):
              with open('emails.csv', 'w', newline='') as csvfile:
                  writer = csv.writer(csvfile, delimiter = '\n')
                  writer.writerow(list_of_emails)
          
          write_to_csv(l)  
          

          【讨论】:

            【解决方案5】:

            您可以将delimiter='\n'csv.writer.writerow 一起使用(注意,不是 writerows)。此外,newline='' 不需要作为 open 的参数。

            import sys 
            import os
            import csv
            
            L = ['name1@domain.com', 'name2@domain.com', 'name3@domain.com']
            
            def write_to_csv(list_of_emails):
                with open('emails.csv', 'w') as csvfile:
                    writer = csv.writer(csvfile, delimiter='\n')
                    writer.writerow(list_of_emails)
            
            write_to_csv(L)
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2015-04-01
              • 1970-01-01
              • 1970-01-01
              • 2022-07-11
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多