根据循环变量写入不同的文件

时间:2016-08-10 12:40:25

标签: python-2.7 for-loop io

考虑以下MWE。

getter

我收到以下错误

  

IOError:[Errno 2]没有这样的文件或目录:' f_500'

当我想要' jj '时,我想写文件对象f_500。是500等等。这样做的正确方法是什么?

谢谢

3 个答案:

答案 0 :(得分:3)

您在第1-4行定义了值为file类型对象的4个变量。但是,您未在for循环中使用这些变量。相反,在循环中,您需要创建更多file类型的对象。 (内置file()函数构造具有给定名称的file类型对象。)

如果您确实要事先打开所有文件,则应使用字典。文件名也可以使用循环构建:

over_density = [500, 200, 178, 100]
filename_pattern = 'halo_classificatio_%d_with_surface_pressure_term.txt'
files = {}
for d in over_density:
    files[d] = open(filename_pattern % d, 'a')

之后,您可以执行for jj循环并使用files[jj]访问相应的文件句柄。

答案 1 :(得分:2)

将文件变量作为globals()locals()返回的dict中的键,取决于上下文:

locals()['f_'+str(jj)].write("%s\t%s\t%s\n" % (tm_msun, cm_msun, vr_mpc))
globals()['f_'+str(jj)].write("%s\t%s\t%s\n" % (tm_msun, cm_msun, vr_mpc))
祝你好运! :)

答案 2 :(得分:0)

这是你在上一个声明中需要做的事情:

exec('''f_%s.write("%s\t%s\t%s\n" % (tm_msun, cm_msun, vr_mpc))''' % (str(jj)) )