python - 使用 Python 比较两个不同的 csv 列时无法获取缺失的元素

标签 python python-3.x

我有两个 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/

相关文章:

python - 在列表理解中进行分配

python - 合并字典的字典和总和值

python - MD5摘要在不同系统之间是否一致?

python - AES 解密抛出 ValueError : Input strings must be a multiple of 16 in length

php - 个人网站的用户友好框架?

python - Xcode Playground 因非 swift 代码而崩溃

Python:我不想解压文件夹,只想将特定文件保存到输出文件夹。我没有得到预期的输出

python-3.x - 如何在python中使用pickle序列化套接字对象

python - Pandas 在每第 n 行后插入一个新行

python - 有没有办法减少类中大量重复的代码