如何使用csv将列表编写为单独的元素?

时间:2016-01-20 04:18:10

标签: python list csv

我有两个列表如下:

list1 = ['filename1', 'filename2', 'filename3']
list2 = ['1', '2', ['3', '4', '5']]

如何写入最终会像这样的csv文件?

filename1,1
filename2,2
filename3,3,4,5

我尝试了两件事,但都没有工作:

with open(outfname, 'wb') as fout:
        csv_out = csv.writer(fout)
        csv_out.writerows(izip(list1, list2))

这表明:

filename1,['1']
filename2,['2']
filename3,['3','4','5']

我尝试在写作者之前添加它:

",".join(list2)

但结果将显示:

filename1,1
filename2,2
filename3,"1,2,3"

5 个答案:

答案 0 :(得分:2)

@Satya有一个好主意使用pandas,但你需要压扁list2,你可以用.apply()来做到这一点:

>>> import pandas as pd
>>> import sys
>>> df = pd.DataFrame({'list1': list1, 'list2': list2})
>>> df = df.join(df.list2.apply(lambda x: pd.Series(x)))
>>> df.drop('list2', axis=1).to_csv(sys.stdout, header=False, index=False)
filename1,1,,
filename2,2,,
filename3,3,4,5

这会将空字段放在缺少数据的位置 或者,您可以编写自己的特殊拉链:

def my_zip(l1, l2):
    for a, b in zip(l1, l2):
        try:
            yield [a]+b
        except TypeError:
            yield [a, b]

>>> csv_out = csv.writer(sys.stdout)
>>> csv_out.writerows(my_zip(list1, list2))
filename1,1
filename2,2
filename3,3,4,5

这正是所要求的输出。

答案 1 :(得分:0)

您可以使用pandas data-frame来形成所需的.csv文件

import pandas as pd
list1 = ['filename1', 'filename2', 'filename3']
list2 = ['1', '2', ['3', '4', '5']]
df = pd.DataFrame()
df['a'] = list1
df['b'] = list2
df.to_csv('D:/sx.csv',index=False) ####you can give any desired path for csv

要点击列表,只需

df['b']=[','.join(x) for x in df['b']]  ####i have separated the list items by comma as of now, but you can give your own separator

继续代码

  df.to_csv('D:/sx.csv',index=False)
  d = pd.read_csv('D:/sx.csv')
  d 
       a      b
 0  filename1      1
 1  filename2      2
 2  filename3  3,4,5

再次修改

  d['a'] = d['a']+','+d['b']
  d
  Out[39]: 
             a      b
0      filename1,1      1
1      filename2,2      2
2  filename3,3,4,5  3,4,5

然后删除列b

 df = d.drop('b',axis=1)
 df
Out[44]: 
             a
 0      filename1,1
 1      filename2,2
 2  filename3,3,4,5
 ######column a shows the desired output...

现在您可以通过df.to_csv('path + file.csv')形成csv

答案 2 :(得分:0)

喜欢这个。它需要一些临时列表,但可以完成工作。

import csv

list1 = ['filename1', 'filename2', 'filename3']
list2 = ['1', '2', ['3', '4', '5']]

with open('out.csv', 'w') as f:
    r = csv.writer(f)
    for name, num in zip(list1, list2):
        r.writerow([name] + list(num))

out.csv看起来像

filename1,1
filename2,2
filename3,3,4,5

答案 3 :(得分:0)

你不需要熊猫。首先要获得所需的数据结构,您只需使用zip即可。要保存为CSV,您可以使用标准CSV模块。

import csv
list1 = ['filename1', 'filename2', 'filename3']
list2 = ['1', '2', ['3', '4', '5']]

zipped = zip(list1, list2)
with open('some.csv', 'w', newline='') as f:
   writer = csv.writer(f)
   writer.writerows(zipped)

答案 4 :(得分:0)

请记住,字符串是一个项目列表。为什么你需要大熊猫和所有这些简单的任务?

list1 = ['filename1', 'filename2', 'filename3']
list2 = ['1', '2', ['3', '4', '5']]
with open(outfname, 'w') as fout:
    for item in zip(list1,list2):
        fout.write(item[0])
        fout.write(',')
        fout.write(','.join(item[1]))
        fout.write('\n')