【发布时间】:2015-09-17 02:16:48
【问题描述】:
我正在使用名为 Financial Data Quality Management Enterprise Edition (FDMEE) 的 Oracle EPM 产品。我编写了一个 Jython 脚本来解析数据文件并将其推送到 FDMEE 产品模式中的自定义表中。
当我推送数据文件的子集时它工作正常。但是当我解析整个数据文件时,它失败并出现错误 IndexError: index out of range: 7.
以下是我收到的错误消息:
File "\\vmhodvesip4\D$\SVESI7\Custom\FDMEEApps\BFRVN/data/scripts/event/BefImport.py", line 5, in <module>
if row[7]=='JAN':
IndexError: index out of range: 7
以下是我使用的代码:
import csv
recReader = csv.reader(open('D:/SVESI7/Custom/FDMEEApps/BFRVN/inbox/BF_Reven_Load/Test03big.txt'), delimiter='!')
for row in recReader:
if row[7]=='JAN':
period_num = '1'
elif row[7]=='FEB':
period_num = '2'
elif row[7]=='MAR':
period_num = '3'
elif row[7]=='APR':
period_num = 4
elif row[7]=='MAY':
period_num = 5
elif row[7]=='JUN':
period_num = 6
elif row[7]=='JUL':
period_num = 7
elif row[7]=='AUG':
period_num = 8
elif row[7]=='SEP':
period_num = 9
elif row[7]=='OCT':
period_num = 10
elif row[7]=='NOV':
period_num = 11
elif row[7]=='DEC':
period_num = 12
else:
period_num = 'skip'
if period_num != 'skip':
params1 = ['batch_plnapps_oi',row[7],period_num,'20' + row[1][-2:],row[2], row[3], row[4], row[5], row[6], row[8], row[9], row[10], row[11], round(row[12],12)]
ins_stmt1 = "insert into aif_open_interface(batch_name,period,period_num,year,col03,col04,col05,col06,col07,col09,col10,col11,col12,amount) values (?,?,?,?,?,?,?,?,?,?,?,?,?,?)"
fdmAPI.executeDML(ins_stmt1,params1,False)
fdmAPI.commitTransaction()
【问题讨论】:
-
此错误报告您没有列表的第 8 个元素。什么是预期的输出?检查它并尝试回溯。
-
另外,请阅读 Pandas 文档 [此处] (pandas.pydata.org/pandas-docs/stable/generated/…) 并使用数据框,它们更适合此目的。
-
我没有太多时间查看您的代码,但我建议您使用 csv 模块中的 Dict_Reader,以便您可以按列名而不是按索引查看列。试试这个,你可能会在不知道问题的情况下找到解决方案
-
嗨@RicardoSilveira 感谢您的评论,预期的输出是,它将数据从文件推送到产品数据库中自定义模式中的表,如果我使用代码执行良好数据的子集,但如果我使用更大的数据集(具有相似的数据结构/格式),也会通过 pandas 给出 indexError,感谢您的参考。
-
@Connor 感谢 Connor 的参考,现在就来看看
标签: python python-2.7 jython-2.5 jython-2.7