3 つの CSV ファイルがあります。後で必要になる情報の大部分を保持する 1 つのマスター CSV ドキュメントがあります。しかし、他の 2 つの CSV ドキュメントのデータが欠落しています。目標は、マスター ドキュメントを他の各 CSV と比較し、2 つの CSV から指定されたデータを取得して、その情報をマスター CSV の行に追加することです。最後にそれらを新しいファイルに書き込みます。
これが私がこれまでに得たものであり、機能するわけではありません。
inv = マスター ドキュメントです。必要な情報の 99% が含まれています。
vb = inv の '\xef\xbb\xbfPART_CODE' と共通の 'PART CODE' を持っています。inv の行に 'ON-HAND' を追加する必要があります
main = inv の '\xef\xbb\xbfPART_CODE' と共通の 'PART CODE' を持っています。inv の行に 'ON-HAND' を追加する必要があります
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
1 番目の問題:
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' が表示されます。
2番目の問題:
for i in vblist:
print i['VB'] #complains of KeyError: VB
述べたように、KeyError を訴えます。単純に print i を実行すると、i のキー/値がそこにあることが表示され、'VB': '0' などと報告されます。
私はまだプログラミングに非常に慣れていません.1週間、毎晩この時間にいて、落胆しています. しかし、あきらめるには十分ではありません!