如何使用python将列表理解结果传递到csv
我有两个长度可变的列表如何使用python将列表理解结果传递到csv,python,python-3.x,csv,Python,Python 3.x,Csv,我有两个长度可变的列表 list1 = ['x1','x2','x3','x4','x5'] list2 = ['x5','x4'] 我尝试以下方法来查找缺少的元素 *[item for item in list1 if item not in list2], sep='\n' 但如果我这样做了 item = *[item for item in skuslist if item not in retaillist], sep='\n' csvwriter.writerow(item)
list1 = ['x1','x2','x3','x4','x5']
list2 = ['x5','x4']
我尝试以下方法来查找缺少的元素
*[item for item in list1 if item not in list2], sep='\n'
但如果我这样做了
item = *[item for item in skuslist if item not in retaillist], sep='\n'
csvwriter.writerow(item)
我无法分配到列表理解
如何将结果传递给writerow?您可以这样尝试:
import csv
list1 = ['x1','x2','x3','x4','x5']
list2 = ['x5','x4']
with open('output.csv', 'w') as f:
writer = csv.writer(f, delimiter='\n', quoting=csv.QUOTE_NONE)
writer.writerow([item for item in list1 if item not in list2])
您需要使用
writerows
为每行写入一个项目,并将每个项目放入一个单元素列表中:
list1 = ['x1','x2','x3','x4','x5']
list2 = {'x5','x4'}
import csv
with open("test.csv","w",newline="") as f:
cw = csv.writer(f)
cw.writerows([x] for x in list1 if x not in list2)
详细信息:为要排除的值创建一个
集合
,因为查找速度更快(即查找更多元素)这里是完成此任务的另一种方法。此方法基于list1和list2之间的差异创建一个集合。代码还按顺序将值写入CSV文件
import csv
list1 = ['x1','x2','x3','x4','x5']
list2 = ['x5','x4']
# Obtain the differences between list1 and list2
list_difference = (list(set(list1).difference(list2)))
# Uses list comprehension to write the values to a CSV file.
# Uses sorted to write the values in order to the CSV file.
with open('output.csv', 'w') as outfile:
csv_writer = csv.writer(outfile)
csv_writer.writerows([[x] for x in sorted(list_difference)])
outfile.close()
你也可以这样做
import csv
list1 = ['x1','x2','x3','x4','x5']
list2 = ['x5','x4']
# Obtain the differences between list1 and list2.
# Uses list comprehension to write the values to a CSV file.
# Uses sorted to write the values in order to the CSV file.
with open('output.csv', 'w') as outfile:
csv_writer = csv.writer(outfile)
csv_writer.writerows([[x] for x in sorted(list(set(list1).difference(list2)))])
outfile.close()
我把它们放在一行,像[x1]、[x2]、[x3]那样,“长”的路是
csvwriter.writerow([item for…],sep=“\n”)
。您可能会想到csvwriter.writerow(*item)
,但您不能像这样在一个元组中混合位置参数和关键字参数。不再工作了我在csv['x1']、['x2']、['x3']。。合二为一row@Evridiki您想要换行吗?@Evridiki请注意,在注释中发布多行文本不会创建多行文本,因此,与
语句的混淆将发生。@kunal如果我对列表1中的项目使用,则无效;如果项目不在列表2中,则如果我做相反的操作,则有效!这两个列表来自两个不同的csv文件,列表1的第一个csv有1列,列表2的第二个csv有6列。如果我设置了(列表1)。差异(列表2)我得到了不可损坏的类型列表为什么?这些示例中没有。这是因为任何一个列表都包含其他列表。