我正在尝试读取文件。我想将文件的行解析为字典,但我似乎无法将该部分放入我的数组中。
我的文件如下:
记录:
2014-05-14,12:16:26,subject,{MSGTYPE="Personal" NAME="Fred" ADDRESS="Flat1" AGE=92 GENDER="M"}
2014-05-15,14:36:26,subject,{MSGTYPE="Personal" NAME="George" ADDRESS="Flat2" AGE=-20 GENDER="M"}
2014-05-13,16:49:26,subject,{MSGTYPE="Personal" NAME="Ringo" ADDRESS="Flat3" AGE=-36 GENDER="M"}
2014-05-12,14:45:26,subject,{MSGTYPE="Personal" NAME="Brian" ADDRESS="Flat4" AGE=-85 GENDER="M"}
2014-05-11,12:43:26,subject,{MSGTYPE="Personal" NAME="Paul" ADDRESS="Flat5" AGE=-33 GENDER="M"}
所以计划是将它拆分为','。然后取值4并将其放入自己的字典中。但是我在拆分方面做错了。
valuesArray = []
f = open(rvfile)
for line in f:
if not line.startswith('**Records**'):
valuesArray = line.split(',')
print '1: {0}'.format(valuesArray[0])
print '2: {1}'.format(valuesArray[1])
我收到错误:
Traceback (most recent call last):
File "FAST_RV_Tests.py", line 70, in <module>
IndexError: index out of range: 1
第一张照片按照我的预期返回'1:2014-05-14'。但阵列中没有别的东西。
答案 0 :(得分:1)
您的数据文件中可能有空行,并且拆分此行不会返回包含足够项目的列表。
在循环中,如果遇到空行,则应拨打continue
。
另一个提示是用第二个参数调用split
告诉,应该应用多少个分裂。这将允许获取最终的JSON部分,您可以使用json.loads
来获取内容
如果我修改您的数据以反映您最后有关于JSON数据的声明,
014-05-14,12:16:26,subject,{"MSGTYPE":"Personal", "NAME":"Fred", "ADDRESS":"Flat1", "AGE": 92, "GENDER":"M"}
2014-05-15,14:36:26,subject,{"MSGTYPE":"Personal", "NAME":"George", "ADDRESS":"Flat2", "AGE": -20, "GENDER":"M"}
2014-05-13,16:49:26,subject,{"MSGTYPE":"Personal", "NAME":"Ringo", "ADDRESS":"Flat3", "AGE": -36, "GENDER":"M"}
2014-05-12,14:45:26,subject,{"MSGTYPE":"Personal", "NAME":"Brian", "ADDRESS":"Flat4", "AGE": -85, "GENDER":"M"}
2014-05-11,12:43:26,subject,{"MSGTYPE":"Personal", "NAME":"Paul", "ADDRESS":"Flat5", "AGE": -33, "GENDER":"M"}
它会像这样工作:
import json
fname = "data.txt"
with open(fname) as f:
for line in f:
line = line.strip()
if len(line) == 0:
continue
if line.startswith('**Records**'):
continue
valuesArray = line.split(',', 3)
y, d = valuesArray[:2]
print '1: {y}'.format(y=y)
print '2: {d}'.format(d=d)
# bonus, read the json data
print valuesArray[3]
jsdata = json.loads(valuesArray[3])
print "jsdata", jsdata
答案 1 :(得分:0)
print '2: {1}'.format(valuesArray[1])
不应该是
print '2: {0}'.format(valuesArray[1])
吗?
格式化中只有一个参数,索引1超出范围。
答案 2 :(得分:0)
您的错误出现在第二行format
行:
print '2: {1}'.format(valuesArray[1])
您只是格式化一个值,因此{1}
应为{0}
{1}
的正确使用方法是:如果你有这样的话:
print "1: {0} {1}".format(valuesArray[0], valuesArray[1])
答案 3 :(得分:0)
如果您的实际输入文件在您的示例所具有的记录之间有空行,那么这可能解释了为什么您的拆分不会产生任何值。另请注意,line
将包含尾随的换行符,因此您可能需要在循环中调用line.strip()
。