如何比较两个列表列表,然后在python中将数据写入excel

问题描述 投票:2回答:1

我在list of lists有两个python,看起来像这样:

列表1:

[['10001', 'Jason', 'University of Utah School of Medicine'],
 ['10007', 'Zhang', 'Duke'],
 ['10016', 'Som', 'Dana-Farber']]

列表2:

[['Som', 'mrcc', 'Wed Dec 20 18:36:28 +0000 2017', '10016'],
 ['David', 'mrcc', 'Wed Dec 20 18:36:38 +0000 2017', '10013'],
 ['Kristen', 'mrcc gro', 'Wed Dec 20 18:37:24 +0000 2017', '10045'],
 ['Zhang', 'wan mrcc', 'Wed Dec 20 18:38:44 +0000 2017', '10007']]

现在我想基于比较这两个excel file之间的数据将数据写入list of lists。我的excel文件的结构如下:enter image description here

为了比较我想要做的是查看list2中每个列表的最后一个值是否存在于list1的列表中。因此,对于上面的样本列表,10016的第一个列表中的list2存在于list1中。所以,如果它存在,那么我想在excel行中写下以下值:

[Qazxswpoi,Yesvalue2 from 3rd list of list1value 3 in 3rd list oflist1value 2 in 1st list oflist2value3 in 1st list of list2]

如果value 1 in 3rd list of list1中不存在list2中每个列表的最后一个值,则将以下内容写入excel文件:

[Qazxswpoi,list1NoN/AN/Avalue 2 in current list of list2]

我知道像value3 in current list of list2中的value 4 in current list of list2这样的软件包用于写入xlwt,但我在上面进行这样的比较时无法得到如何编写?

更新:这是我到目前为止所拥有的:

python

当我运行此代码时,它执行没有错误,但当我尝试打开文件时,我得到错误作为excel files

list1和list2是我上面描述的两个列表列表。

python excel list csv export-to-csv
1个回答
2
投票

你想要做的是直接的,它只是语法和你如何组织代码。以下是我解决问题的方法:

book = xlwt.Workbook(encoding="utf-8")

sheet1 = book.add_sheet("Sheet 1")


sheet1.write(0, 0, "User ID Present?")
sheet1.write(0, 1, "User Name")
sheet1.write(0, 2, "Center Name")
sheet1.write(0, 3, "Text")
sheet1.write(0, 4, "Date")
sheet1.write(0, 5, "User ID")

i=1
for items2 in list2:

    for items1 in list1:

        if items2[3] in items1[0]:
            sheet1.write(i, 0, "Yes")
            sheet1.write(i, 1, items1[1])
            sheet1.write(i, 2, items1[2])
            sheet1.write(i, 3, items2[1])
            sheet1.write(i, 4, items2[2])
            sheet1.write(i, 5, items1[0])
        else:
            sheet1.write(i, 0, "No")
            sheet1.write(i, 1, 'N/A')
            sheet1.write(i, 2, 'N/A')
            sheet1.write(i, 3, items2[1])
            sheet1.write(i, 4, items2[2])
            sheet1.write(i, 5, items2[3])
    i=i+1
book.save("Sample_Report_V1.xlsx")

Notes

  • 您描述的过程在函数file cannot be opened due to wrong file format or file extension中。
  • 为了使查找更容易,我创建了一个名为import csv def merge(list1, list2): lookup = {row[0]: row for row in list1} for row2 in list2: value = row2[-1] if value in lookup: row1 = lookup[value] yield 'Yes', row1[1], row1[2], row2[1], row2[2], row1[0] else: yield 'No', 'N/A', 'N/A', row2[1], row2[2], row2[3] if __name__ == '__main__': list1 = [ ['10001', 'Jason', 'University of Utah School of Medicine'], ['10007', 'Zhang', 'Duke'], ['10016', 'Som', 'Dana-Farber']] list2 = [ ['Som', 'mrcc', 'Wed Dec 20 18:36:28 +0000 2017', '10016'], ['David', 'mrcc', 'Wed Dec 20 18:36:38 +0000 2017', '10013'], ['Kristen', 'mrcc gro', 'Wed Dec 20 18:37:24 +0000 2017', '10045'], ['Zhang', 'wan mrcc', 'Wed Dec 20 18:38:44 +0000 2017', '10007']] rows = merge(list1, list2) with open('merge_lists.csv', 'wb') as outfile: writer = csv.writer(outfile) writer.writerow(['User ID Present?', 'User Name', 'Center Name', 'Text', 'Date', 'User ID']) writer.writerows(rows) 的字典,其中用户ID是键,行是值。
  • 通过写入excel文件,我想你的意思是CSV文件格式

Update

我的原始答案输出到CSV文件,我认为最容易处理。您可以毫无困难地在Excel中打开该文件。但是,我有一种感觉,你坚持写Excel格式,所以我花了一些时间学习merge足以使用它。这是我更新的解决方案。请注意,此模块处理较旧的.xls文件格式,而不是较新的.xlsx格式。如果保存为.xlsx,Excel将无法打开它。

lookup
© www.soinside.com 2019 - 2024. All rights reserved.