【发布时间】:2013-11-05 03:56:13
【问题描述】:
我有 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' 等。
我对编程仍然很陌生,一个星期以来每晚都在这个时间工作,但我已经气馁了。但还不足以放弃!
【问题讨论】:
-
我不确定我是否完全理解您的问题。你有你的 inv 文件,它有一个“ON-HAND”列。我将您的问题解释为您想用 main 或 vb 的结果填充“PART CODE”列是否正确,具体取决于哪个与 inv 共享 ON-HAND 值?
-
INV not 有手头,dictline2['VB'] = dictline1['ON-HAND'] 正在将字典键和值添加到从投资。
-
如果您要使用表格数据,您应该查看pandas 库。它使合并和对齐数据变得更加容易。
标签: python python-2.7 csv dictionary