2013-02-20 63 views
0

我已经有一个脚本,我已经放在一起,通过调用另一个python模块生成大量充满json数据的文件。然后,我希望能够在生成它们之后导入它们,并对它们包含的数据进行处理。如何阻止Python执行时检查文件

问题是,当我尝试运行此脚本时,它抱怨文件不存在。我猜是因为在执行代码之前,Python会检查所有要打开的文件,而不管开放语句在代码中的位置。有没有办法解决这个问题,所以在发生器调用模块创建它们之前,它不会尝试打开这些文件?下面的代码示例如下:

#!/usr/bin/python 

import os, sys 
import json 
import random 
import ships_levels_stats_generator 

def main(): 
    number = 10 
    ships_levels_stats_generator.interface(str(number)) 

    for i in range(0, number): 
     with open('../Test/attack%s.json' % i) as attack_json: 
      attack_data = json.load(attack_json) 
     with open('../Test/hp%s.json' % i) as hp_json: 
      hp_data = json.load(hp_json) 
     with open('../Test/repair%s.json' % i) as repair_json: 
      repair_data = json.load(repair_json) 

    for key in attack_data.iterkeys(): 
     if len(attack_data[key]) < 20: 
      print "Under 20." 
     elif len(attack_data[key]) < 30: 
      print "Under 30." 
     elif len(attack_data[key]) < 60: 
      print "Under 50." 
     elif len(attack_data[key]) < 80: 
      print "Under 80." 
     else: 
      print "Over 80." 

回答

1

这只是一个缩进问题:for循环需要缩进成为主函数的一部分。就像现在一样,它在每次加载文件时都会运行。

+0

对不起,这只是我没有得到这个格式正确。它在实际代码中缩进。 – 2013-02-20 22:40:21

+0

@KrisGriebe然后问题不在您发布的代码中。 Python在执行'open'调用之前不会尝试打开任何文件,所以这不是问题。 – 2013-02-20 22:44:25

+0

很难说没有看到完整的代码,但它可能是一个权限问题,或者它可能是代码有一个有条件的空循环或返回,以便打开永远不会被调用。 – 2013-02-20 22:48:21

0

你永远不会调用ships_levels_stats_generator.interface(),这是presumeably,你创建的文件,失去了def main():

+0

你是什么意思,我从来没有打过电话?它就在那里.... – 2013-02-20 22:42:19