如何比较两个列表列表,然后将数据写入 python 中的 excel
how to compare two list of lists and then write data to excel in python
我在 python
中有两个 list of lists
,看起来像这样:
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']]
现在我想根据这两个 list of lists
之间的比较数据将数据写入 excel file
。我的 excel 文件的结构如下:
为了比较,我想做的是查看 list2
中每个列表的最后一个值是否存在于 list1
中的列表中。因此,对于上述示例列表,list2
中第一个列表中的 10016
出现在 list1
中。因此,如果它存在,那么我想在 excel 行中写入以下值:
[Yes
,value2 from 3rd list of list1
,value 3 in 3rd list oflist1
,value 2 in 1st list oflist2
,value3 in 1st list of list2
,value 1 in 3rd list of list1
]
如果 list2
中每个列表的最后一个值在 list1
中不存在,则将以下内容写入 excel 文件:
[No
,N/A
,N/A
,value 2 in current list of list2
,value3 in current list of list2
,value 4 in current list of list2
]
我知道 python
中的 xlwt
之类的包用于写入 excel files
但我无法在进行上述比较时了解如何写入?
更新:这是我目前的情况:
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")
当我 运行 这段代码执行时没有错误,但是当我尝试打开文件时出现错误 file cannot be opened due to wrong file format or file extension
list1 和 list2 是我上面描述的两个列表列表。
您想做的很简单,只是语法和组织代码的方式。这是我解决您的问题的方法:
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)
备注
- 您描述的过程在函数
merge
. 中
- 为了便于查找,我创建了一个名为
lookup
的字典,其中用户 ID 是键,行是值。
- 通过写入excel文件,我猜你指的是 CSV 文件格式
更新
我的原答案输出为CSV文件,我认为最容易处理。您可以毫无困难地在 Excel 中打开该文件。但是,我有一种感觉,你是坚持要写成Excel格式,所以我花了一些时间学习xlwt
足以使用它。这是我更新的解决方案。请注意,此模块处理较旧的 .xls 文件格式,而不是较新的 .xlsx 格式。如果保存为 .xlsx,Excel 将无法打开。
import xlwt
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]
def write_row(sheet, row, row_number, starting_column_number=0):
for column_number, cell in enumerate(row, starting_column_number):
sheet.write(row_number, column_number, cell)
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)
workbook = xlwt.Workbook(encoding='utf-8')
worksheet = workbook.add_sheet('Sheet 1')
write_row(
worksheet,
'User ID Present?,User Name,Center Name,Text,Date,User ID'.split(','),
row_number=0)
for row_number, row in enumerate(rows, 1):
write_row(worksheet, row, row_number)
workbook.save('Sample_Report_V1.xls')
我在 python
中有两个 list of lists
,看起来像这样:
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']]
现在我想根据这两个 list of lists
之间的比较数据将数据写入 excel file
。我的 excel 文件的结构如下:
为了比较,我想做的是查看 list2
中每个列表的最后一个值是否存在于 list1
中的列表中。因此,对于上述示例列表,list2
中第一个列表中的 10016
出现在 list1
中。因此,如果它存在,那么我想在 excel 行中写入以下值:
[Yes
,value2 from 3rd list of list1
,value 3 in 3rd list oflist1
,value 2 in 1st list oflist2
,value3 in 1st list of list2
,value 1 in 3rd list of list1
]
如果 list2
中每个列表的最后一个值在 list1
中不存在,则将以下内容写入 excel 文件:
[No
,N/A
,N/A
,value 2 in current list of list2
,value3 in current list of list2
,value 4 in current list of list2
]
我知道 python
中的 xlwt
之类的包用于写入 excel files
但我无法在进行上述比较时了解如何写入?
更新:这是我目前的情况:
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")
当我 运行 这段代码执行时没有错误,但是当我尝试打开文件时出现错误 file cannot be opened due to wrong file format or file extension
list1 和 list2 是我上面描述的两个列表列表。
您想做的很简单,只是语法和组织代码的方式。这是我解决您的问题的方法:
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)
备注
- 您描述的过程在函数
merge
. 中
- 为了便于查找,我创建了一个名为
lookup
的字典,其中用户 ID 是键,行是值。 - 通过写入excel文件,我猜你指的是 CSV 文件格式
更新
我的原答案输出为CSV文件,我认为最容易处理。您可以毫无困难地在 Excel 中打开该文件。但是,我有一种感觉,你是坚持要写成Excel格式,所以我花了一些时间学习xlwt
足以使用它。这是我更新的解决方案。请注意,此模块处理较旧的 .xls 文件格式,而不是较新的 .xlsx 格式。如果保存为 .xlsx,Excel 将无法打开。
import xlwt
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]
def write_row(sheet, row, row_number, starting_column_number=0):
for column_number, cell in enumerate(row, starting_column_number):
sheet.write(row_number, column_number, cell)
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)
workbook = xlwt.Workbook(encoding='utf-8')
worksheet = workbook.add_sheet('Sheet 1')
write_row(
worksheet,
'User ID Present?,User Name,Center Name,Text,Date,User ID'.split(','),
row_number=0)
for row_number, row in enumerate(rows, 1):
write_row(worksheet, row, row_number)
workbook.save('Sample_Report_V1.xls')