Python Exec返回的行数超过预期

Python Exec返回的行数超过预期,python,exec,defaultdict,Python,Exec,Defaultdict,首先,我想以“是的,我知道我不应该使用exec,但是我的数据是可信的”作为这个问题的前提 我有一个脚本,可以在文件中创建一组默认字典行。每行包含键、时间值和数据。我通过一个过程将这些信息输入到图表中,但是,最后一行似乎打印了两次,因此我的图表有问题: 有关代码部分: import fileinput import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt import matplotlib.dates as

首先,我想以“是的,我知道我不应该使用exec,但是我的数据是可信的”作为这个问题的前提

我有一个脚本,可以在文件中创建一组默认字典行。每行包含键、时间值和数据。我通过一个过程将这些信息输入到图表中,但是,最后一行似乎打印了两次,因此我的图表有问题:

有关代码部分:

import fileinput
import matplotlib
matplotlib.use('Agg')
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
from pylab import *

filein = 'list.txt'
output_name = "image2.png"
dicts = []
times = []
values = []

temp_csv_open = open(temp_csv, "a")

line = ""
for line in fileinput.input([filein]):
        line = line.replace("defaultdict(<type 'int'>,", "data = ")
        line = line.replace(")", "")
        line = line.strip()
        print line # show and tell 1
        exec(line)
        print data # show and tell 2
        for k in sorted(data.iterkeys()):
                print k, data[k] # show and tell 3
                time = datetime.datetime.strptime(k, "%Y%m%d%H")
                times.append(time)
                values.append(data[k])
print times, values # show and tell 4
但问题在于:显示并告知2个返回:

{'2012021307': 71316, '2012021306': 82418, '2012021305': 65217, '2012021309': 69406, '2012021310': 76422, '2012021311': 94188, '2012021312': 111817, '2012021313': 127002, '2012021314': 141099, '2012021315': 147830, '2012021316': 136330, '2012021317': 122252, '2012021318': 118619, '2012021319': 115763, '2012021308': 66833, '2012021321': 130022, '2012021320': 121393, '2012021323': 139363, '2012021322': 137658}
{'2012021408': 139745, '2012021409': 143658, '2012021403': 275882, '2012021418': 31216, '2012021400': 207878, '2012021416': 268214, '2012021402': 270258, '2012021414': 288286, '2012021404': 232521, '2012021405': 195062, '2012021406': 166669, '2012021407': 142855, '2012021417': 245582, '2012021411': 194360, '2012021401': 269296, '2012021413': 262078, '2012021410': 158954, '2012021415': 296457, '2012021412': 237083}
{'2012021523': 676350, '2012021522': 670147, '2012021521': 650984, '2012021520': 617401, '2012021501': 170448, '2012021503': 246600, '2012021502': 250013, '2012021505': 363866, '2012021504': 300809, '2012021507': 333080, '2012021506': 370454, '2012021509': 343671, '2012021508': 330452, '2012021512': 549736, '2012021513': 622690, '2012021510': 387871, '2012021511': 456171, '2012021516': 647559, '2012021517': 600969, '2012021514': 692257, '2012021515': 706377, '2012021518': 579669, '2012021519': 587969}
{'2012021605': 465191, '2012021608': 333986, '2012021609': 344126, '2012021602': 651692, '2012021603': 676458, '2012021600': 664484, '2012021601': 686408, '2012021606': 389669, '2012021607': 342613, '2012021622': 1111334, '2012021623': 1316907, '2012021620': 932692, '2012021621': 1065501, '2012021619': 828190, '2012021618': 617836, '2012021604': 589033, '2012021611': 467532, '2012021610': 387220, '2012021613': 634585, '2012021612': 560227, '2012021615': 718498, '2012021614': 704008, '2012021617': 606396, '2012021616': 665030}
{'2012021605': 465191, '2012021608': 333986, '2012021609': 344126, '2012021602': 651692, '2012021603': 676458, '2012021600': 664484, '2012021601': 686408, '2012021606': 389669, '2012021607': 342613, '2012021622': 1111334, '2012021623': 1316907, '2012021620': 932692, '2012021621': 1065501, '2012021619': 828190, '2012021618': 617836, '2012021604': 589033, '2012021611': 467532, '2012021610': 387220, '2012021613': 634585, '2012021612': 560227, '2012021615': 718498, '2012021614': 704008, '2012021617': 606396, '2012021616': 665030}

所以显而易见的问题是,以2012021605开头的最后一行从哪里来。我在使用exec时有什么地方不对吗?

文件的最后一行是空行


同样地,当循环到达它时,当行
exec(line)时,名称
data
不会反弹到新值
发生并因此保持绑定到上一个值。

文件的最后一行是空行。因此,当循环到达它时,当行
执行(行)
发生并因此保持绑定到上一个值时,名称
数据不会反弹到新值。@DanD。如果这是一条空线,你不应该把它处理掉吗?@dad。nevermind我在exec(行)之前添加了“if not line:continue”,这就解决了问题。谢谢你的洞察力。@DanD。您想添加您的评论作为答案,以便我可以接受吗?
data =  {'2012021310': 76422, '2012021311': 94188, '2012021323': 139363, '2012021312': 111817, '2012021307': 71316, '2012021306': 82418, '2012021305': 65217, '2012021313': 127002, '2012021314': 141099, '2012021315': 147830, '2012021316': 136330, '2012021317': 122252, '2012021318': 118619, '2012021319': 115763, '2012021322': 137658, '2012021321': 130022, '2012021320': 121393, '2012021309': 69406, '2012021308': 66833}
data =  {'2012021408': 139745, '2012021409': 143658, '2012021414': 288286, '2012021418': 31216, '2012021416': 268214, '2012021400': 207878, '2012021401': 269296, '2012021402': 270258, '2012021403': 275882, '2012021404': 232521, '2012021405': 195062, '2012021406': 166669, '2012021407': 142855, '2012021417': 245582, '2012021411': 194360, '2012021413': 262078, '2012021410': 158954, '2012021415': 296457, '2012021412': 237083}
data =  {'2012021523': 676350, '2012021522': 670147, '2012021521': 650984, '2012021520': 617401, '2012021501': 170448, '2012021503': 246600, '2012021502': 250013, '2012021505': 363866, '2012021504': 300809, '2012021507': 333080, '2012021506': 370454, '2012021509': 343671, '2012021508': 330452, '2012021512': 549736, '2012021513': 622690, '2012021510': 387871, '2012021511': 456171, '2012021516': 647559, '2012021517': 600969, '2012021514': 692257, '2012021515': 706377, '2012021518': 579669, '2012021519': 587969}
data =  {'2012021608': 333986, '2012021609': 344126, '2012021602': 651692, '2012021603': 676458, '2012021600': 664484, '2012021601': 686408, '2012021620': 932692, '2012021621': 1065501, '2012021604': 589033, '2012021605': 465191, '2012021623': 1316907, '2012021606': 389669, '2012021607': 342613, '2012021619': 828190, '2012021618': 617836, '2012021622': 1111334, '2012021611': 467532, '2012021610': 387220, '2012021613': 634585, '2012021612': 560227, '2012021615': 718498, '2012021614': 704008, '2012021617': 606396, '2012021616': 665030}
{'2012021307': 71316, '2012021306': 82418, '2012021305': 65217, '2012021309': 69406, '2012021310': 76422, '2012021311': 94188, '2012021312': 111817, '2012021313': 127002, '2012021314': 141099, '2012021315': 147830, '2012021316': 136330, '2012021317': 122252, '2012021318': 118619, '2012021319': 115763, '2012021308': 66833, '2012021321': 130022, '2012021320': 121393, '2012021323': 139363, '2012021322': 137658}
{'2012021408': 139745, '2012021409': 143658, '2012021403': 275882, '2012021418': 31216, '2012021400': 207878, '2012021416': 268214, '2012021402': 270258, '2012021414': 288286, '2012021404': 232521, '2012021405': 195062, '2012021406': 166669, '2012021407': 142855, '2012021417': 245582, '2012021411': 194360, '2012021401': 269296, '2012021413': 262078, '2012021410': 158954, '2012021415': 296457, '2012021412': 237083}
{'2012021523': 676350, '2012021522': 670147, '2012021521': 650984, '2012021520': 617401, '2012021501': 170448, '2012021503': 246600, '2012021502': 250013, '2012021505': 363866, '2012021504': 300809, '2012021507': 333080, '2012021506': 370454, '2012021509': 343671, '2012021508': 330452, '2012021512': 549736, '2012021513': 622690, '2012021510': 387871, '2012021511': 456171, '2012021516': 647559, '2012021517': 600969, '2012021514': 692257, '2012021515': 706377, '2012021518': 579669, '2012021519': 587969}
{'2012021605': 465191, '2012021608': 333986, '2012021609': 344126, '2012021602': 651692, '2012021603': 676458, '2012021600': 664484, '2012021601': 686408, '2012021606': 389669, '2012021607': 342613, '2012021622': 1111334, '2012021623': 1316907, '2012021620': 932692, '2012021621': 1065501, '2012021619': 828190, '2012021618': 617836, '2012021604': 589033, '2012021611': 467532, '2012021610': 387220, '2012021613': 634585, '2012021612': 560227, '2012021615': 718498, '2012021614': 704008, '2012021617': 606396, '2012021616': 665030}
{'2012021605': 465191, '2012021608': 333986, '2012021609': 344126, '2012021602': 651692, '2012021603': 676458, '2012021600': 664484, '2012021601': 686408, '2012021606': 389669, '2012021607': 342613, '2012021622': 1111334, '2012021623': 1316907, '2012021620': 932692, '2012021621': 1065501, '2012021619': 828190, '2012021618': 617836, '2012021604': 589033, '2012021611': 467532, '2012021610': 387220, '2012021613': 634585, '2012021612': 560227, '2012021615': 718498, '2012021614': 704008, '2012021617': 606396, '2012021616': 665030}