我有两个csv文件 第一个在一列的行中有大约420个值 第二个大约有203行,共有6列
文件1
x1
x2
x3
...
文件2
x1;a1;b1;c1;d1;e1
x2;a1;b1;c1;d1;e1
x3;a1;b1;c1;d1;e1
x5;a1;b1;c1;d1;e1
x6;a1;b1;c1;d1;e1
我尝试通过以下方式将它们放入两个不同的列表
skuslist =[]
retaillist =[]
def myskus():
contents = []
with open('SKUS.csv', 'r', encoding='utf-8',newline='') as csvf:
reader = csv.reader(csvf, delimiter=";")
for row in reader:
contents.append(row) # Add each sku to list contents
return contents
def myretails():
retails = []
with open('retails_csv.csv', 'r', encoding='utf-8',newline='') as csvf:
reader = csv.reader(csvf, delimiter=";")
for row in reader:
retails.append(row[0])
return retails
skuslist = myskus()
retaillist = myretails()
并导出SKU列表中不在零售列表中的元素
with open('export.csv', 'w', newline='') as f:
writer = csv.writer(f, delimiter='\n')
for item in skuslist:
if item not in retaillist:
writer.writerow(item)
我得到了SKU列表420的所有元素,而不是丢失的元素
我应该等待元素
x4
x7
..
零售列表中缺少的元素 我不应该等待217个元素吗? 我该怎么办?
答案 0 :(得分:1)
csv.reader
会产生一个项目列表,所以当您这样做时:
for row in reader:
contents.append(row) # Add each sku to list contents
对于循环的每次迭代,它都会向contents
列表中添加一个列表,而不是字符串,所以当您:
for item in skuslist:
item
成为一项的列表,而不是字符串。
将其更改为:
for sku, in reader:
contents.append(sku)
以便将SKU从CSV阅读器生成的列表中解压缩。
还要注意,您应该将项目列表传递给writer.writerow
;否则,您传递给它的字符串将被视为可迭代的,并且您将在每行上看到一个字符:
writer = csv.writer(f)
for item in skuslist:
if item not in retaillist:
writer.writerow([item])