我有两个列表如下:
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"
答案 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')