我有两个 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
..
零售 list 中缺少的元素 我不应该等待217个元素吗? 我该怎么做?
最佳答案
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)
以便从 CSV 读取器生成的列表中解压 SKU。
另请注意,您应该将项目列表传递给 writer.writerow
;否则,您传递给它的字符串将被视为可迭代,并且您将在每行上看到一个字符:
writer = csv.writer(f)
for item in skuslist:
if item not in retaillist:
writer.writerow([item])
关于python - 使用 Python 比较两个不同的 csv 列时无法获取缺失的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55441839/