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()
这句有问题,你的两种格式都是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写入字符串列表,单行变多个单字符的问题?的主要内容,如果未能解决你的问题,请参考以下文章