我有 3 个 CSV 文件。我有一个主 CSV 文档,其中包含我以后需要的大部分信息。但是缺少其他两个 CSV 文档中的数据。目标是将主文档与其他每个 CSV 进行比较,从 2 个 CSV 中提取指定数据并将该信息添加到主 CSV 中的行。最后将它们写入一个新文件。
这是我到目前为止所得到的,而不是它的工作原理。
inv = 是主文档,它包含我需要的 99% 的信息
vb = 与 inv 的 '\xef\xbb\xbfPART_CODE' 有共同的 'PART CODE',我需要将它的 'ON-HAND' 添加到 inv 的行
main = 与 inv 的 '\xef\xbb\xbfPART_CODE' 有共同的 'PART CODE',我需要将它的 'ON-HAND' 添加到 inv 的行
import csv
inv = csv.DictReader(open('ireport.txt', 'rU'), dialect='excel-tab', delimiter="\t")
vb = csv.DictReader(open('vb.txt', 'rU'), dialect='excel-tab', delimiter="\t")
main = csv.DictReader(open('main.txt', 'rU'), dialect='excel-tab', delimiter="\t")
vblist = []
mainlist = []
def vbfunc(dictreader1, dictreader2):
dictreader2 = list(dictreader2)
for dictline1 in dictreader1:
for dictline2 in dictreader2:
if dictline1['PART CODE'] == dictline2['\xef\xbb\xbfPART_CODE']:
dictline2['VB'] = dictline1['ON-HAND']
else:
dictline2['VB'] = "0"
vblist.append(dictline2)
def mainfunc(dictreader1, dictreader2):
dictreader2 = list(dictreader2)
for dictline1 in dictreader1:
for dictline2 in dictreader2:
if dictline1['PART CODE'] == dictline2['\xef\xbb\xbfPART_CODE']:
dictline2['MAIN'] = dictline1['ON-HAND']
else:
dictline2['MAIN'] = "0"
mainlist.append(dictline2)
vbfunc(vb,inv)
#mainfuc(main,inv) #I'll get to this when the other function works
for i in vblist:
print i['VB'] #complains of KeyError: VB
第一个问题:
if dictline1['PART CODE'] == dictline2['\xef\xbb\xbfPART_CODE']:
dictline2['VB'] = dictline1['ON-HAND']
else:
dictline2['VB'] = "0"
当它添加到列表中时,它将每个结果视为“0”,如果我省略 else: dictline2['VB'] = "0" 部分,它会按预期报告。但如果没有留下,它稍后会在我尝试打印 i['VB'] 时抱怨 KeyError: 'VB'
第二个问题:
for i in vblist:
print i['VB'] #complains of KeyError: VB
如前所述,抱怨 KeyError。如果我只是打印 i,它会显示 i 的键/值在那里,它会报告 'VB': '0' 等。
我对编程仍然很陌生,一个星期每晚都在这个时间,我变得灰心了。但还不足以放弃!