考虑以下MWE。
getter
我收到以下错误
IOError:[Errno 2]没有这样的文件或目录:' f_500'
当我想要' jj '时,我想写文件对象f_500。是500等等。这样做的正确方法是什么?
谢谢
答案 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)) )