python中CSV写入字符串列表,单行变多个单字符的问题?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python中CSV写入字符串列表,单行变多个单字符的问题?相关的知识,希望对你有一定的参考价值。

如果要写入的数据就是个一维的列表,比如['ccc','ddd','aaa'],会写程三行,但是每行的值会被拆成单个的字符,一个字符占一列。如果要写的数据是多维的列表,比如[['aa','bb',cc'],['dd','ee','ff']就正好可以一个数据占一列。这个问题怎么解决?
--------------------自己搞定--------------------------
def write_csv(file_name,data_list):
opt = open(file_name, 'w', newline='')
optwriter = csv.writer(opt)
for v in data_list:
if isinstance(v,str):
optwriter.writerow([v])
else:
optwriter.writerow(v)
opt.close()

for v in data_list:
这句有问题,你的两种格式都是list,
在这句之前应该先判断整个list的类型,如果是嵌套的list,才进行for
否则,就应该把简单list转成嵌套list
即data_list = [data_list]
参考技术A

opt = open(file_name, 'w', newline='')

python列表到csv文件,每个项目都在新行中

【中文标题】python列表到csv文件,每个项目都在新行中【英文标题】:python list to csv file with each item in new line 【发布时间】: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)  

【问题讨论】:

【参考方案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)

【讨论】:

以上是关于python中CSV写入字符串列表,单行变多个单字符的问题?的主要内容,如果未能解决你的问题,请参考以下文章

读取csv字典变成str了怎么办

将 Python 列表写入 csv 文件

如何将列表列表写入 CSV 文件 Python?

Python:使用多个标题行写入 CSV

python csv写入的字符串是啥格式

将 utf-8 格式的 Python 列表写入 CSV