是否可以使用np.savetxt使输出文件名成为变量?我有多个输入文件,我将从中读取并执行一些计算并将结果输出到一个文件中。现在我每次都在为不同的输出更改文件名,但有没有办法自动完成?我使用的代码如下:
np.savetxt('ES-0.dat', np.c_[strain_percent, es_avg, es_std])
我想将文件名更改为ES-25.dat,ES 50.dat,ES-75.dat ....等。这也取决于我读到的输入文件:
flistC11 = glob.glob('ES-0')
还有办法自动将输入文件更改为ES-25,ES-50,ES-75等吗?
我尝试使用循环,但输入和输出都必须在''内部,这不允许我将其变为变量。不知道怎样才能解决这个问题?那时我的工作会轻松得多。
在Saullo Castro回答之后添加了信息:
我正在阅读的文件(ES *)包含两个简单的列,如下所示:
200 7.94
200 6.55
200 6.01
200 7.64
200 6.33
200 7.96
200 7.92
整个脚本如下:
import numpy as np
import glob
import sys
flistC11 = glob.glob('ES-s*')
#%strain
fdata4 = []
for fname in flistC11:
load = np.loadtxt(fname)
fdata4.append(load[:,0]) #change to 0=strain or 1=%ES
fdata_arry4=np.array(fdata4)
print fdata_arry4
strain=np.mean(fdata_arry4[0,:])
strain_percent = strain/10
print strain_percent
#ES
fdata5 = []
for fname in flistC11:
load = np.loadtxt(fname)
fdata5.append(load[:,1]) #change to 0=strain or 1=%ES
fdata_arry5=np.array(fdata5)
print fdata_arry5
es_avg=np.mean(fdata_arry5[0,:])
es_std=np.std(fdata_arry5[0,:])
print es_avg
print es_std
np.savetxt('{0}.dat'.format(fname), np.c_[strain_percent,es_avg,es_std])
答案 0 :(得分:1)
您可以执行以下操作:
flistC11 = glob.glob('ES*')
for fname in flistC11:
# ...something...
np.savetxt('{0}.dat'.format(fname), np.c_[strain_percent, es_avg, es_std])
请注意,使用ES*
会告诉glob()
返回所有使用ES
开头的文件的名称。
编辑: 根据你的评论,你似乎真的想要这样的东西:
import glob
import numpy as np
flistC11 = glob.glob('ES-s*')
for fname in flistC11:
strains, stresses = np.loadtxt(fname, unpack=True)
strain = np.mean(strains)
strain_percent = strain/10
print fname, strain_percent
es_avg = np.mean(stresses)
es_std = np.std(stresses)
print fname, es_avg, es_std
np.savetxt('{0}.dat'.format(fname), np.c_[strain_percent, es_avg, es_std])
答案 1 :(得分:1)
你的错误在哪里(第15行在哪里?)并不完全清楚,但我们假设它在加载中。
fdata4 = []
for fname in flistC11:
load = np.loadtxt(fname)
fdata4.append(load[:,0]) #change to 0=strain or 1=%ES
我建议将其更改为:
fdata4 = []
for fname in flistC11:
print fname # check that the names make sense
load = np.loadtxt(fname)
print load.shape # check that the shape is as expected
# maybe print more of 'load' here
# I assume you want to collect 'load' from all files, not just the last
fdata4.append(load[:,0]) #change to 0=strain or 1=%ES
print fdata4
在Ipython shell中,我没有问题:
In [90]: flistC11=['ES0','ES1','ES2']
In [91]: for fname in flistC11:
np.savetxt('{}.dat'.format(fname), np.arange(10))
....:
In [92]: glob.glob('ES*')
Out[92]: ['ES2.dat', 'ES0.dat', 'ES1.dat']