【发布时间】:2011-10-24 11:40:23
【问题描述】:
我正在使用 for 循环将字典添加到字典列表(我称之为 data_file),使用 data_file.append()
它工作正常 :) 但后来我尝试在另一个 for 循环中向 data_file 添加更多字典,我再次使用 data_file.append() 并且它不起作用。它不会将这些字典添加到 data_file
有谁知道我做错了什么?
我没有收到错误。它只生成一个文件,该文件仅包含来自 Massage_generators 的字典。它不接受 travel_generators 的任何内容。
我什至尝试注释掉第一个 for 循环,即针对 massage_generators 的循环,在这种情况下,它确实会添加到 travel_generators 字典中。好像我不能使用 .append() 两次?
任何帮助将不胜感激!
对不起,它不是很优雅,我只是在学习这些编码的东西! :)
谢谢
import csv
import copy
import os
import sys
generators = list()
for filename in os.listdir(os.getcwd()):
root, ext = os.path.splitext(filename)
if root.startswith('Travel Allowance Auto Look up') and ext == '.csv':
travel = filename
open_file = csv.DictReader(open(travel))
generators.append(open_file)
travel_generators = generators[:]
massage_generators = generators[:]
data_file = [] # result will be stored here (List of dicts)
travel_remap = {'FINAL_TRAVEL_ALL':'AMOUNT'}
massage_remap = {'MASSAGE_BIK':'AMOUNT'}
for generator in massage_generators:
for dictionary in generator:
dictionary['PAYMENT_TYPE_CODE'] = 'MASSAGE_BIK'
dictionary['COMMENT'] = 'Massage BIK'
dictionary['IS_GROSS'] = 'FALSE'
dictionary['PAYMENT_TO_DATE'] = '01/01/2099'
dictionary['PAID MANUALLY'] = 'FALSE'
for old_key, new_key in massage_remap.iteritems():
if old_key not in dictionary:
continue
dictionary['AMOUNT'] = dictionary['MASSAGE_BIK']
del dictionary['MASSAGE_BIK']
if (dictionary['AMOUNT'] != '0' and dictionary['AMOUNT'] != ''):
data_file.append(dictionary)
for generator in travel_generators:
for dictionary in generator:
dictionary['PAYMENT_TYPE_CODE'] = 'TRANSPORTATION_ALLOWANCE'
dictionary['COMMENT'] = 'Annual travel allowance paid in monthly installments'
dictionary['IS_GROSS'] = 'TRUE'
dictionary['PAYMENT_TO_DATE'] = '01/01/2099'
dictionary['PAID MANUALLY'] = 'FALSE'
for old_key, new_key in travel_remap.iteritems():
if old_key not in dictionary:
continue
dictionary['AMOUNT'] = dictionary['FINAL_TRAVEL_ALL']
del dictionary['FINAL_TRAVEL_ALL']
if (dictionary['AMOUNT'] != 'Not Applicable' and dictionary['AMOUNT'] != '0' and dictionary['AMOUNT'] != '' and dictionary['AMOUNT'] != '#N/A'):
data_file.append(dictionary)
keys = ['EMPID', 'Common Name', 'PAYMENT_TYPE_CODE', 'CURRENCY', 'AMOUNT', 'EFFECTIVE_DATE',
'COMMENT', 'PAYMENT_FROM_DATE', 'PAYMENT_TO_DATE', 'IS_GROSS', 'HIDDEN_UNTIL', 'PAID MANUALLY', 'PAYMENT_DATE']
bulk_upload = open('EMEA Bulk Upload.csv', 'wb')
dict_writer = csv.DictWriter(bulk_upload, keys, restval='', extrasaction='ignore')
dict_writer.writer.writerow(keys)
dict_writer.writerows(data_file)
print "Everything saved! Look up EMEA Bulk Upload.csv"
【问题讨论】:
-
您是否收到错误消息?你能发布你的代码吗?
-
嗨!我没有收到错误,它只是在我第二次要求它追加时没有添加任何内容。我已经添加了我的代码,抱歉,它看起来不是很好!
-
在每个
data_file.append(dictionary)前添加一行print len(data_file), dictionary并检查它是否正在打印您正在等待的数据。 -
这并不能解决您的问题,但您知道吗
if dictionary['AMOUNT'] not in ('Not Applicable', '0', '', '#N/A'): -
哦,谢谢 :) 我认为会有更好的方法来写,好吧 :)
标签: python list dictionary