簡體   English   中英

Python比較兩個列表

[英]Python compare two list

我試圖從contatti.csv(包含兩列,“名稱”和“姓”)中找到training_full.csv(兩列,“ macroclass”和“ description”)內的所有行。 我想在training_full.csv中檢索“說明”的所有行,其中contatti.csv中包含“名稱”和“姓”。

我創建的腳本似乎只評估training_full.csv的第一行,因此,僅打印training_full.csv的第一行(腳本在其中找到匹配項)。 如果我以第一行沒有任何匹配的方式修改training_full.csv,則結果為空。

這里的代碼:

import csv

match=[]

with open('xxxxxxxxxxx/training_full1.csv', encoding='utf-8') as csvfile, open('output.csv', 'wb') as output, open('xxxxxxxxxxx/contatti.CSV') as contatti:
spamreader = csv.reader(csvfile)
spamreader_contacts = csv.reader(contatti, delimiter=';')
spamwriter = csv.writer(output)
for row_desc in spamreader:
    #print(righe[0])
    for row_cont in spamreader_contacts:
        #print(row[0])
        if (row_cont[0] + " " + row_cont[1]) in row_desc[0]:
            match.append(row_desc[0])

print(match)

謝謝你的幫助,

菲利波。

查看您的問題,它似乎可以分為三個部分:1)讀取名稱,並建立一個列表2)將訓練文件與名稱列表進行比較3)編寫匹配項

這樣做,我們可以得到類似於以下的解決方案:

import csv

names = []
with open('xxxxxxxxxxx/contatti.csv', 'rb') as f:
    contatti = csv.reader(f, delimiter=';')
    for row in contatti:
        names.append("{} {}".format(row[0], row[1]))

matches=[]
with open('xxxxxxxxxxx/training_full1.csv', 'rb', encoding='utf-8') as f:
    training = csv.reader(f)
    for row in training:
        for name in names:
            if name in row[1]: # description being the second column 
                matches.append(row[1])
                break

with open('output.csv', 'wb') as f:
    output = csv.writer(f)
    for match in matches:
        output.writerow(match)

print(matches)

如注釋中所指出的,解決方案嘗試的主要問題是,一旦您尋找第一個匹配項,就會用盡csv閱讀器。 在我介紹的解決方案中,首先會建立一個名稱列表。 這樣可以確保我們可以多次搜索的名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM